GC與finalize()

1、finalize不會被調用
public class FinalizeMethod {
    public FinalizeMethod() {
        System.gc();
    }
 
    public void finalize() {
        System.out.println("after System.gc() is called");
    }
 
    public static void main(String[] args) {
        FinalizeMethod d = new FinalizeMethod();
    }
}
解析:
FinalizeMethod d=new FinalizeMethod();
被執行的時候,構建器中調用了gc(),但這時對象有變量d引用,不是垃圾,所以該對象不會被回收,當然該對象的fianlize方法不會被調用了。
 
2、finalize會被調用
public class FinalizeMethod {
    public FinalizeMethod() {
        System.gc();
    }
 
    public void finalize() {
        System.out.println("after System.gc() is called");
    }
 
    public static void main(String[] args) {
        FinalizeMethod d = new FinalizeMethod();
        d = null;//強制使d成爲GC對象
        System.gc();
    }
}
解析:
強制d可以被GC後,調用System.gc()就可以看到finalize()方法被調用了。
注意,如果不加上最後一個System.gc()也是無法看到被調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章