內(nèi)存回收與分配重點關注的是堆內(nèi)存和方法區(qū)內(nèi)存(程序計數(shù)器占用小,虛擬機棧和本地方法棧隨線程有相同的生命周期)。
一、判斷對象是否存活?
1. 引用計數(shù)算法
優(yōu)勢:實現(xiàn)簡單,效率高。
致命缺陷:無法解決對象相互引用的問題——會導致對象的引用雖然存在,但是已經(jīng)不可能再被使用,卻無法被回收。
2. 可達性分析算法
對象到GC Roots沒有引用鏈,則回收。
GC Roots包括:
(1)Java虛擬機棧中引用的對象。
(2)方法區(qū)中類靜態(tài)屬性引用的對象。
(3)方法去中常量引用的對象。
(4)本地方法棧中Native方法(JNI)引用的對象。
3. 關于引用
JDK1.2之后,Java對引用進行了擴充。