垃圾收集算法彙總

1.引用計數法:這是個比較古老而經典的垃圾收集算法,其核心就是在對象被其餘所引用時計數器加1,而當引用失效時則減1,不過這種方式有很是嚴重的問題,就是沒法處理循環引用的狀況,還有就是每次進行加減操做比較浪費系統性能。java

------------------------------------------------------------------------------------------------------------------算法

2.標記清除法:就是分爲標記和清除兩個階段進行處理內存中那個的對象,這種方式也有很是大的弊端,就是空間碎片問題,垃圾回收後的空間不是連續的,不連續的內存空間的工做效率要低於連續的內存空間。性能

-----------------------------------------------------------------------------------------------------------------優化

3.複製算法:其核心思想就是將內存空間分爲兩塊,每次只使用其中一塊,在垃圾回收時,將正在使用的內存中的存留對象複製到未被使用的內存塊中去,以後去清除以前正在使用的內存塊中全部的對象,反覆去交換倆個內存的角色,完成垃圾收集。對象

(java中新生代的from和to空間就是使用這個算法)內存

-----------------------------------------------------------------------------------------------效率

4.標記壓縮法:標記壓縮法在標記清除法基礎之上作了優化,把存活的對象壓縮到內存一端,然後進行垃圾清理。基礎

那麼爲何新生代和老年代使用不一樣的算法呢?垃圾回收

答:由於對於新生代來講,它的回收頻率很高,可是每次回收耗時都很短,而老年代回收頻率較低,可是耗時會相對較長,因此應該儘可能減小老年代的GC.循環

5.分代算法:就是根據對象的特色把內存分紅N塊,然後根據每一個內存的特色使用不一樣的算法。

6.分區算法:其主要就是將整個內存分爲N多個小的獨立空間,每一個小空間均可以獨立使用,這樣細粒度的控制一次回收都少個小空間和那些小空間,而不是對整個空間盡心GC,從而提高性能,減小GC的停頓時間。

相關文章
相關標籤/搜索