1. 程式人生 > >關於JVM 中的GC Root

關於JVM 中的GC Root

由於最近各種實習筆試,所以大部分的精力都放在了資料結構學習上;今天偶然間想起 JVM 的垃圾回收,試著回想了一下;發現很多東西都不是那麼清晰了。

那麼回到正題,看過JVM的同學應該都知道hotspot虛擬機器上,垃圾回收判定物件是不是垃圾物件用的是可達性分析演算法。

其中可達性分析演算法是從GC Root開始分析物件的可達性,即有沒有被引用。

百度上盜圖一張,呵呵。

想看下圖,Object5、 6、 7 沒有被GC Root 引用就會被 垃圾回收器標記為可回收垃圾。(如有偽科學,還請指正) 

那怎麼確定GC Root呢,一般包含以下幾種物件:

1、虛擬機器棧(棧中的本地變量表)中引用的物件;

2、方法區中類靜態屬性引用的物件;

3、方法區中常量引用的物件;

4、本地方法棧中JNI(即一般說的Native方法)引用的物件。

(深入理解JVM虛擬機器)