天天看點

JVM如何識别垃圾?

        詳細講述了 JVM 的記憶體區域,知道了 GC 主要發生在堆,那麼 GC 該怎麼判斷堆中的對象執行個體或資料是不是垃圾呢,或者說判斷某些資料是否是垃圾的方法有哪些。

1 引用計數法

        最容易想到的一種方式是引用計數法,啥叫引用計數法,簡單地說,就是對象被引用一次,在它的對象頭上加一次引用次數,如果沒有被引用(引用次數為 0),則此對象可回收

2 可達性算法

        現代虛拟機基本都是采用這種算法來判斷對象是否存活,可達性算法的原理是以一系列叫做  GC Root 的對象為起點出發,引出它們指向的下一個節點,再以下個節點為起點,引出此節點指向的下一個結點。。。(這樣通過 GC Root 串成的一條線就叫引用鍊),直到所有的結點都周遊完畢,如果相關對象不在任意一個以 GC Root 為起點的引用鍊中,則這些對象會被判斷為「垃圾」,會被 GC 回收。

繼續閱讀