[英]At what line can this object be considered to be garbage collected. Java
因此,我的理解是在第1行,创建了一个新对象,它由obj引用。 在第2行,obj引用了另一个新对象。 因此我们在第1行创建的对象可以进行垃圾回收,因为任何实例均未引用该对象。 但是测试问题的答案在第3行。原因? 答案正确吗?
Object obj = new Object(); //line 1
obj = new Object(); //line 2
obj = null; //3
编辑:询问在第1行创建的对象何时可以进行垃圾收集。
在现实世界中,这个问题(由标题引起)没有明确的答案。
我知道这应该是一个带有简单答案的学术性问题,但是有很多假设可以使我可以对想要存在的任何答案进行法律裁决。
即使我们没有从帽子中拉出任何兔子,答案仍将取决于“在第X行”是指执行该命令之前还是之后
垃圾收集器正在检查活动对象,并丢弃不存在的任何对象。 创建obj
,要定义它的类型,因为它使编译器知道要为该地址分配多少空间,因为Type Object
将在那里存在。 当第二行执行时,new将创建该对象的全新实例,并且您将其地址分配给obj
。 因此,在将obj
重新分配为引用新对象之后,旧对象仍然存在,但不再被引用。 它可能会被标记为要收集,因为它占用了堆中的空间,但是不再处于活动状态。 第3行也一样,除了前面提到的,您要为其分配的地址为null
,并且没有创建新对象。 因此,以前由obj
引用的obj
现在是死对象,而垃圾回收人员将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.