關於JAVA的GC,我只是略微瞭解,我知道如果一個對象沒有其他東西引用它,它就會在適當的時機被回收掉。
但,如果一個A對象持有B對象的引用,後對A對象的引用被置為null,那麼B對象還會被回收嗎?如果B被回收,那麼順序是怎麼樣的?是A先,還是B先?
就讓我們來實踐一下:
創建兩個類:
需要說明的是:finalize不一定會在對象被回收前被調用。
Main類:
需要說明的是: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才被回收。
閱讀更多 最後一個NPE 的文章