当引用对象时,垃圾收集器不会运行。哪个对象?

时间:2015-03-02 15:03:15

标签: java garbage-collection

由于为特定类创建了很多对象,其中一些可以被引用,一些可以匿名放在堆中,因此可以进行垃圾收集。因此,堆中甚至一个非引用对象的存在足以使垃圾收集器运行,或者是否有任何其他条件来确保垃圾收集器被执行。

谢谢

Jayendra

2 个答案:

答案 0 :(得分:2)

我们不知道GC何时执行,它取决于很多事情,例如GC的类型。您也可以通过执行System.gc()向VM推荐启动GC。但这又是一个推荐

答案 1 :(得分:1)

对于JVM的典型参考实现,对象上的GC是完全不确定的。没有办法保证何时,甚至是否会运行GC,更不用说它是否会导致特定的对象引用被释放(并且它的相应终结器被调用。)这与该特定对象的状态无关。

正如评论中所指出的,System.gc()仅仅是一个提示或请求。在很多情况下,它将导致完整的GC。但是考虑收集堆转储通常会导致在生成转储之前对System.gc()进行2-3次调用,这主要是为了提高实际发生的几率。

有一些实验性虚拟机提供各种实时保证实现,其中一些不是这样。