最近學了下關于對象是否存活方面的知識,我老是覺得有些知識明明看完還挺明白的,但是過了幾天再看就跟看新東西一樣。故寫一寫,記一記。
引用計數(shù)法和可達性分析算法皆是判斷對象是否存活的算法。
引用計算法:為對象設置一個計數(shù)器,設值為0。若有地方引用它時,計數(shù)器加1,結束引用時減1。判斷值是否為0,若為0說明該對象沒有被引用,會被判定為可回收對象;若不為0說明該對象被引用,不會回收。優(yōu)點:實現(xiàn)簡單,且效率高。不足:難處理循環(huán)引用的情況
可達性分析算法:GC root為起點開始收索,該路徑稱為引用鏈。當存在對象到GC root沒有引用鏈時,說明當前對象不可用。判定為可回收對象??蛇_性分析算法的可回收對象還有存活的可能性!??!?
該對象會進行第一次判斷,看是否有必要執(zhí)行finalize()方法,如果對象沒有覆蓋finalize()方法或者finalize()方法被虛擬機調用過,該對象會被視為"沒必要執(zhí)行",會被回收。若第一次判斷通過被視為”有必要執(zhí)行“,該對象被放進F-Queue隊列里面,虛擬機自動生成一個finalizer線程去觸發(fā)fianlize()方法,如果對象在觸發(fā)方法的過程中連接上了引用鏈,則該對象不會被回收,否則會被回收。
不對之處,望指出