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()也是無法看到被調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.