bae*_*aek 15 java garbage-collection
我已经在线阅读了一些Java垃圾收集指南,但我仍然有点不清楚,并希望确保我的代码中没有内存泄漏.
Java GC是否收集丢失其引用的对象,但其变量仍有引用?
所以我想说我有SomeObject:
public class SomeObject {
public ObjectVar var;
public SomeObject() {
var = new ObjectVar();
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码:
SomeObject obj1 = new SomeObject();
SomeObject obj2 = new SomeObject();
obj2.var = obj1.var;
obj1 = null;
Run Code Online (Sandbox Code Playgroud)
所以obj1的var有引用,但是obj1不再有任何引用.那么,GC会破坏obj1,但保持var存活吗?(我假设是这样;只是想确定).谢谢!
das*_*ght 17
这是将要发生的事情(见下面的评论)
// obj1 and obj1.var get created
SomeObject obj1 = new SomeObject();
// obj2 and obj2.var get created
SomeObject obj2 = new SomeObject();
// old obj2.var becomes eligible for GC
obj2.var = obj1.var;
// obj1 becomes eligible for GC
obj1 = null;
Run Code Online (Sandbox Code Playgroud)
最后,还有两个没有得到GCd的对象 - obj2前者obj1.var现在被引用为obj2.var.
注意:在ObjectVar类是非静态内部类的特殊情况下SomeObject,保持引用obj1.var也会保持不变obj1.这是因为SomeObject.ObjectVar类内部有一个隐藏的类型变量SomeObject,它引用了内部类的外部对象.
| 归档时间: |
|
| 查看次数: |
4633 次 |
| 最近记录: |