- 引用計數法:
算法描述:給對象中添加一個引用計數器,每當一個地方引用他時,計數器值就加1;當引用失敗時,計數器值就減一;任何時刻計數器爲0的對象就是不可能在被使用的。
優點:引用計數器算實現簡單,判定效率也很高。
缺點:很難解決對對象之間相互循環的引用的問題,比如兩個對象,testA、testB,其中testA.instance = testB,testB.instance = testA,就存在這種問題
2. 可達性分析算法:
算法描述:通過一系列的稱爲"GC Roots"的對象作爲起始點,從這些節點開始向下搜索,搜索所走過的路徑稱爲引用鏈,當一個對象到GC Roots,沒有任何引用鏈相連(用圖論來講,就是從GC Roots到這個對象不可達)時,則證明此對象時不可用的。
如圖所示:
在Java語言中,可作爲GC Roots的對象包括以下對象:
1. 虛擬機棧(棧幀中的本地變量表)中的引用的對象
2. 方法區中類靜態屬性引用的對象
3. 方法區中常量引用的對象
4. 本地方法棧中JNI(即一般說的Native方法)引用的對象