Man*_*ish 3 java garbage-collection
我知道System.gc()不能保证导致GC,但理论上,在下面的代码中,该对象是否obj有资格进行垃圾收集?
public class Demo {
public static void main(String[] args) throws Exception {
SomeClass obj = new SomeClass();
ArrayList list = new ArrayList();
list.add(obj);
obj = null;
System.gc();
}
}
class SomeClass {
protected void finalize() {
System.out.println("Called");
}
}
Run Code Online (Sandbox Code Playgroud)
在您调用实例时,您创建System.gc()的SomeClass实例不符合垃圾回收的条件,因为它仍然被list对象引用,即它仍然可以访问.
但是,只要此方法返回list超出范围,那么obj将符合垃圾收集的条件(如此list).
简单地将引用设置obj为null本身不会使引用的对象符合垃圾回收的条件.只有在可见对象的图形中没有对象的引用时,对象才有资格.
| 归档时间: |
|
| 查看次数: |
2121 次 |
| 最近记录: |