[英]Does calling new Object( ); twice make the object created by first call eligible for garbage collection?
鉴于:
1. public class GC {
2. private Object o;
3. private void doSomethingElse(Object obj) { o = obj; }
4. public void doSomething() {
5. Object o = new Object();
6. doSomethingElse(o);
7. o = new Object();
8. doSomethingElse(null);
9. o = null;
10. }
11. }
当调用doSomething()
方法时,在第5行中创建的Object
可用于垃圾回收之后是哪一行?
正确答案是第8行。
这是为什么? 我认为它应该是第7行,因为new将启动一个新的Object
然后分配给o
,这导致第5行中创建的Object
失去其引用(然后才有资格获得GC)。 我错了吗?
正确答案是第8行。为什么?
你将doSomething()
的o
局部与类级别的o
混淆。 尽管第7行将doSomething()版本的o
为其他引用,但仍然具有通过doSomethingElse()
方法设置的类级别o
。 您必须将该引用置空以使其符合GC条件,并且仅通过第8行上的方法调用发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.