一個關於JAVA GC的小實驗

關於JAVA的GC,我只是略微瞭解,我知道如果一個對象沒有其他東西引用它,它就會在適當的時機被回收掉。

但,如果一個A對象持有B對象的引用,後對A對象的引用被置為null,那麼B對象還會被回收嗎?如果B被回收,那麼順序是怎麼樣的?是A先,還是B先?

就讓我們來實踐一下:

創建兩個類:

一個關於JAVA GC的小實驗

需要說明的是:finalize不一定會在對象被回收前被調用。

Main類:

一個關於JAVA GC的小實驗

需要說明的是: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才被回收。


分享到:


相關文章: