如果垃圾收集器没有删除它们,仍然可以运行未引用的对象吗?

时间:2013-06-08 19:04:54

标签: java garbage-collection

如果一个对象正在等待被垃圾收集,但是包含一个在最后一次引用该对象时运行的线程,那么该线程是否仍会运行并且代码是否仍会执行?那么你是否可能有一堆应该被删除的鬼对象,但是对你的代码有影响?你怎么防止这种情况?对象是否有办法判断是否等待收集?

2 个答案:

答案 0 :(得分:5)

线程在完成之前不会被垃圾收集,所以如果你的线程永远不会完成,它们将无法用于垃圾收集。正如注释中的fge所指出的那样,线程通常会引用封闭对象,这当然会阻止线程被垃圾回收。

至于知道对象是否正在被收集的路上,this回答有一些关于你能做什么(和不能做)的很好的细节。

除此之外,您可以建议jvm使用system.gc()运行垃圾收集,但不能保证jvm将运行垃圾收集器。

答案 1 :(得分:0)

线程将一直运行直到完成,无论是否可能创建线程并保存对它的引用的对象仍然存在,当前是可访问的还是有资格进行垃圾回收。

如果您希望线程与对象的生命周期相关联,您可能应该实现java.lang.AutoCloseable,并要求线程在close()中终止。