将对象引用设置为null后会发生什么

时间:2012-04-19 21:09:53

标签: java reference garbage-collection

我知道对象引用或对象句柄本身有一个大小,并且大小取决于JVM。我只是想知道在显式设置为null后会发生什么。假设我们有变量Object o = new Object(),之后我们设置o = null。它会被垃圾收集吗?

3 个答案:

答案 0 :(得分:4)

在你的例子中:

Object o = new Object()
o = null;

假设o是字段或局部变量/参数。在前一种情况下,它在一些其他(外部)对象中占用4/8字节。当外部对象被垃圾收集时,这些字节将被垃圾收集。

如果o是参数/局部变量,则不需要垃圾回收,JVM将“回收”堆栈并简单地重用/擦除该空间。

答案 1 :(得分:1)

引用不是对象,除了包含它们的对象之外,它们不受GC的约束。他们生活在词汇范围内,他们的生命周期相同。

答案 2 :(得分:1)

当对象存在任何类型的引用时,不会对其进行垃圾回收。如果指向对象的所有引用都设置为null或者指向其他对象,则该对象可能被垃圾收集,但它将不再是“这些引用引用的对象”。

请注意,Java有一个名为WeakReference的类,它用于保存对象的引用,而不会阻止它被垃圾回收。如果系统执行垃圾收集时,存在任何作为WeakReference目标的对象,但否则有资格进行垃圾收集,系统将使{{1}无效}}。此时,如果在WeakReference无效之前没有人询问WeakReference目标,那么将不再对该对象进行任何引用,因此它将有资格进行收集。