我知道对象引用或对象句柄本身具有大小,并且大小取决于 JVM。我只是想知道它被明确设置为空后会发生什么。假设我们有一个变量Object o = new Object()
,然后我们设置o = null
. 会被垃圾回收吗?
问问题
2133 次
3 回答
4
在您的示例中:
Object o = new Object()
o = null;
假设o
是一个字段或一个局部变量/参数。在前一种情况下,它在其他(外部)对象中占用 4/8 个字节。当外部对象被垃圾收集时,这些字节将被垃圾收集。
如果o
是参数/局部变量,则不需要垃圾收集,JVM 将“回收”堆栈并简单地重用/擦除该空间。
于 2012-04-19T21:15:00.953 回答
1
引用不是对象,它们不受 GC 的影响,除了包含它们的对象。它们存在于词法作用域中,并且具有相同的生命周期。
于 2012-04-19T22:22:29.030 回答
1
当存在任何类型的引用时,不会对任何对象进行垃圾收集。如果指向一个对象的所有引用都设置为 null 或指向其他对象,则该对象可能会被垃圾回收,但它将不再是“这些引用所引用的对象”。
请注意,Java 有一个名为 的类WeakReference
,该类旨在保存对对象的引用,而不会阻止它被垃圾收集。如果当系统执行垃圾收集时,存在任何作为 a 的目标的对象WeakReference
,但否则有资格进行垃圾收集,则系统将使WeakReference
. 那时,如果WeakReference
在它失效之前没有人询问它的目标,那么将不再有对该对象的任何引用,因此它将有资格被收集。
于 2012-04-19T23:33:16.967 回答