1. 程式人生 > >java虛擬機器自動記憶體管理機制

java虛擬機器自動記憶體管理機制

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 複製程式碼