JVM回收機制的三大算法包括:
1. 標(biāo)記-清除算法(Mark-Sweep): 這是最基本的垃圾回收算法,分為兩個階段:標(biāo)記和清除。在標(biāo)記階段,通過某種方式遍歷所有存活的對象,并標(biāo)記它們;在清除階段,清除所有未標(biāo)記的對象(即未被引用的對象),并且將存活的對象進(jìn)行壓縮。(清楚未標(biāo)記對象會產(chǎn)生大量內(nèi)存碎片)
2. 復(fù)制算法(Copy):復(fù)制算法將內(nèi)存區(qū)域分成兩塊,每次只使用其中一塊,當(dāng)這一塊的空間滿了之后,就將存活的對象復(fù)制到另一塊中。在復(fù)制過程中可以進(jìn)行內(nèi)存壓縮,同時也避免了內(nèi)存碎片等問題。
3. 標(biāo)記-整理算法(Mark-Compact):標(biāo)記-整理算法在標(biāo)記-清除算法的基礎(chǔ)上進(jìn)行了改進(jìn),它依然將所有存活對象標(biāo)記,但在回收時并不是直接清除未標(biāo)記的對象,而是把所有存活的對象移到一端,然后清除邊界以外的所有空間。因此,標(biāo)記-整理算法與復(fù)制算法相比,它沒有浪費一半的內(nèi)存,但需要進(jìn)行存儲器整理,開銷更大。
這三種算法各有優(yōu)缺點,JVM會根據(jù)不同情況和內(nèi)存大小采用適當(dāng)?shù)乃惴ńM合來進(jìn)行垃圾回收。