java虛擬機器自動記憶體管理機制
阿新 • • 發佈:2019-01-29
public class FinalizeEscapeGC{
public static FinalizeEscapeGC SAVE_HOOK = null; // 靜態屬性引用,作為GC Roots
public void isAlive () {
System.out.println("yes,i am still alive :)");
}
protected void finalize() throws Throwable {
super.finalize();
System.out.println("called finalize method.");
FinalizeEscapeGC.SAVE_HOOK = this; // 建立引用鏈
}
public static void main(String[] args) throws Throwable {
SAVE_HOOK = new FinalizeEscapeGC(); // 建立引用鏈
SAVE_HOOK = null; // 剪短引用鏈
System.gc();
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead :(");
}
// 任何一個物件的finalize()方法都只會被系統自動呼叫一次
SAVE_HOOK = null;
System.gc();
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead :(");
}
}
}按 Ctrl+C 複製程式碼
public static FinalizeEscapeGC SAVE_HOOK = null; // 靜態屬性引用,作為GC Roots
public void isAlive () {
System.out.println("yes,i am still alive :)");
}
protected void finalize() throws Throwable {
super.finalize();
System.out.println("called finalize method.");
FinalizeEscapeGC.SAVE_HOOK = this; // 建立引用鏈
}
public static void main(String[] args) throws Throwable {
SAVE_HOOK = new FinalizeEscapeGC(); // 建立引用鏈
SAVE_HOOK = null; // 剪短引用鏈
System.gc();
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead :(");
}
// 任何一個物件的finalize()方法都只會被系統自動呼叫一次
SAVE_HOOK = null;
System.gc();
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead :(");
}
}
}按 Ctrl+C 複製程式碼