上一章講了對象的存活分析,分析完對象是否存活後,我們就需要執行相應的垃圾回收過程,至于選擇哪種垃圾回收算法呢,目前主要有以下三種垃圾回收算法:
1.标記清除算法

過程:标記--》清除
産生的問題:
1.标記和清除的過程效率都不高
2.空間問題,标記清除後會産生大量的不連續記憶體碎片,空間碎片越多會導緻以後程式在
在配置設定較大的對象實,無法找到足夠的連續記憶體二不得不提前出發一次垃圾收集動作。
2. 複制算法
過程:分為AB兩塊記憶體,将A中存活對象記憶體複制到B中,然後将A中的全部置為空
為什麼出現?
現在的商業虛拟機都采用這種算法來回收新生代,主要是新生代中98%的對象都是朝生夕死的,
是以有大量的記憶體是需要回收的,我們隻需要移動少部分記憶體。是以并不需要按1:1來配置設定
而是将記憶體分為較大的一塊Eden和兩塊較小的Survivor空間,每次實用一塊Eden和其中一塊survivor,
survivor from 和survivor to。比例是8:1:1,
如果騰出的記憶體不夠,會用擔保配置設定算法(将對象配置設定至老年代)
缺點:複制算法在對象存活率較高時,需要複制較多的記憶體,更關鍵的是,如果不想浪費50%的
記憶體,就需要額外的空間進行配置設定擔保,以因對被使用的記憶體中所有對象都是100%存活
的極端情況,是以,老年代不能使用複制算法
3.标記整理算法
過程:将所有存活的對象标記處來,全部整理到一端,剩下的部分記憶體全部置空