一個利用System.gc和finalize研究Java垃圾回收機制的練習

源代碼:

package basic;

public class finalizeTest {

	private String name;
	public void finalize(){
		System.out.println("finalize called: " + this.name);
		System.out.println("Thread id in finalize: " + Thread.currentThread().getId());
	}
	
	public finalizeTest(String name){
		this.name = name;
	}
	
	public static void main(String[] args) {
		
		System.out.println("Main Thread id: " + Thread.currentThread().getId());
		finalizeTest test = new finalizeTest("Jerry");
		test.hashCode();
		/* 這個新創建出來的對象實例沒有任何變量指向它,因此System.gc()調用之後就會被回收 
		 * 而且能發現Scala實例執行finalize方法的線程並不是主線程,打印出的線程ID不一樣
		 * */
		new finalizeTest("Scala");

		System.gc();
	}

}

打印輸出:

Main Thread id: 1
finalize called: Scala
Thread id in finalize: 3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章