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