一個關於JAVA GC的小實驗
關於JAVA的GC,我只是略微瞭解,我知道如果一個物件沒有其他東西引用它,它就會在適當的時機被回收掉。
但,如果一個A物件持有B物件的引用,後對A物件的引用被置為null,那麼B物件還會被回收嗎?如果B被回收,那麼順序是怎麼樣的?是A先,還是B先?
就讓我們來實踐一下:
建立兩個類:
public class MyObject {
private MyObject1 myObject1 = new MyObject1();
@Override
protected void finalize() throws Throwable {
System.err.println("my object gc");
}
}
public class MyObject1 {
@Override
protected void finalize() throws Throwable {
System.err.println("my object 1 gc");
}
}
需要說明的是:finalize不一定會在物件被回收前被呼叫。
Main類:
public class Main {
public static void main(String[] args) {
MyObject myObject =new MyObject();
myObject = null;
System.gc();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
需要說明的是:System.gc()只是建議虛擬機器進行垃圾回收,但具體是由虛擬機器自己去決定的,這裡我使用的是Java HotSpot(TM) 64-Bit Server VM 18.9。
不同的虛擬機器實現不同,可能會有不一樣的結果。
好的,讓我們來執行一下:
my object 1 gc
my object gc
Process finished with exit code 0
首先是object1被回收,然後object才被回收。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3402/viewspace-2817794/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於delete cascade的小實驗delete
- 關於介面實現的一個小問題
- 分享一個關於Cookie做的實驗結果Cookie
- Java 初學者做的第一個微信小程式--關於Java基礎Java微信小程式
- 關於JS迴圈效率小實驗JS
- Java出現一個新的GC:LXRJavaGC
- 關於windows installer的一點小經驗(轉)Windows
- 關於 JavaScript 字串的一個小知識JavaScript字串
- 一個關於Java Excel的問題JavaExcel
- Java的一個關於“星球”的列舉Java
- 關於C++ scanf的一個小知識C++
- 關於一個java專案呼叫另一個java專案的心得Java
- Java關於IO的一個小工具Java
- 一次關於偷拍的網路實驗
- 關於Java Mail的身份驗證!JavaAI
- 那些關於Java的小祕密Java
- 【小貼士】關於transitionEnd/animate的一個有趣故事
- 一個關於狗記錄的Java練習Java
- Java關於檔案上傳的一個例子Java
- 一個關於java.net.URL的問題.Java
- 關於許可權設定的一個小把戲
- 關於 curl 工作中一個小錯誤
- 關於java中String字元轉碼的幾個小測試Java字元
- 關於PostCSS的一點小科普CSS
- 8個關於Python的小技巧Python
- oracle實驗記錄 關於記憶體的幾個viewOracle記憶體View
- 基於 canvas 實現的一個截圖小 demoCanvas
- 一個關於Java Socket的問題,大家看一下Java
- java實現一個簡單的爬蟲小程式Java爬蟲
- Java Hotspot G1 GC的一些關鍵技術JavaHotSpotGC
- 關於用java生成驗證碼Java
- 關於 http cache 的一個小問題以及引發的思考HTTP
- 關於ELF檔案格式的實驗
- 關於append sql hint的實驗APPSQL
- 一個關於Struts Action的小框架, 請高手指點一下框架
- 關於 Java 的10個謊言Java
- 關於Java的10個謊言Java
- 關於Java的一點想法Java