一個關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個關於SDWAN單臂部署方案驗證的實驗
- 分享一個關於Cookie做的實驗結果Cookie
- Java出現一個新的GC:LXRJavaGC
- Java 初學者做的第一個微信小程式--關於Java基礎Java微信小程式
- 關於 JavaScript 字串的一個小知識JavaScript字串
- 關於一個java專案呼叫另一個java專案的心得Java
- Java關於IO的一個小工具Java
- 關於C++ scanf的一個小知識C++
- 8個關於Python的小技巧Python
- 關於 curl 工作中一個小錯誤
- java實現一個簡單的爬蟲小程式Java爬蟲
- 關於 http cache 的一個小問題以及引發的思考HTTP
- 關於GC原理和效能調優實踐,看這一篇就夠了!GC
- 關於HOJ的搭建和二開經驗小結
- 關於Canvas的一些經驗Canvas
- 關於小楊的個人部落格定位
- 基於 Source Generators 做個 AOP 靜態編織小實驗
- 關於 /dev/null 差點直播吃鞋的一個小問題devNull
- 一個關於php兩個陣列compare實踐PHP陣列
- 關於STM324的一些實驗的準備資料
- 兩個寶藏|關於我在github上衝浪時的一個小技巧。Github
- 關於Java健壯性的一些思考與實踐!Java
- 有意思!一個關於 Spring 歷史的線上小遊戲Spring遊戲
- 關於maven的一份小筆記Maven筆記
- 關於v-for的一點小總結
- 關於計算機網路的 Wireshark 實驗計算機網路
- 關於計算機網路第一章的wireshark實驗計算機網路
- 理解PG的xmin和xmax的幾個小實驗
- 關於豬的八個驚人事實
- java GC CollectorJavaGC
- 聊聊UDP、TCP和實現一個簡單的JAVA UDP小DemoUDPTCPJava
- Python關於使用subprocess.Popen時遇到的一個小問題記錄Python
- 關於前端應該知道的5個小知識前端
- Python中關於Thread的一點小知識Pythonthread
- Golang - 關於 proto 檔案的一點小思考Golang
- 關於range的一個知識點
- 關於一個最簡單的數獨解題實現與疑惑一
- 微信小程式--關於加快小程式開發的幾個小建議微信小程式