GC算法包括:
- 新生代: 標(biāo)記清除算法(mark-sweep)戏溺,復(fù)制算法(copying)
- 老年代:標(biāo)記整理算法(mark-compact)
標(biāo)記清除算法
分為標(biāo)記和清除兩部分杂瘸,首先標(biāo)記需要回收的對(duì)象,然后統(tǒng)一回收對(duì)象空間。
必須使用空閑列表方式分配內(nèi)存。
缺點(diǎn):
- 標(biāo)記和清除效率不高
- 產(chǎn)生大量?jī)?nèi)存碎片,在分配大內(nèi)存對(duì)象時(shí)即使有較多剩余內(nèi)存也會(huì)提前觸發(fā)GC
復(fù)制算法
將內(nèi)存分為兩塊悔详,只使用其中一塊。GC時(shí)雷蹂,首先標(biāo)記需要回收的對(duì)象伟端,然后將存活對(duì)象統(tǒng)一轉(zhuǎn)移到另一半內(nèi)存中。
實(shí)現(xiàn)簡(jiǎn)單匪煌,沒有內(nèi)存碎片责蝠,使用指針碰撞方式分配內(nèi)存即可党巾。
HotSpot虛擬機(jī)實(shí)際實(shí)現(xiàn)會(huì)將新生代內(nèi)存分為三部分,eden區(qū)和survivor區(qū)*2霜医,eden與survivor區(qū)的默認(rèn)大小比例為8:1齿拂,每次使用eden區(qū)和1個(gè)survivor區(qū)。保證內(nèi)存使用率為90%肴敛。
標(biāo)記整理算法
要把大象放冰箱署海,統(tǒng)共分三步
- 標(biāo)記需要回收的對(duì)象
- 將存活對(duì)象向內(nèi)存一側(cè)復(fù)制
- 回收剩余未被使用的內(nèi)存