分帶式GC的基本演算法比較

2022-03-25 14:48:52 字數 646 閱讀 2854

簡要對比三種基本演算法: 

mark-sweep

mark-compact

copying

速度中等

最慢最快

空間開銷

少(但會堆積碎片)

少(不堆積碎片)

通常需要活物件的2倍大小(不堆積碎片)

移動物件?否是

是關於時間開銷: 

mark-sweep:mark階段與活物件的數量成正比,sweep階段與整堆大小成正比 

mark-compact:mark階段與活物件的數量成正比,compact階段與活物件的大小成正比 

copying:與活物件大小成正比 

年輕代中的物件在minor gc時的存活率應該很低,這樣用copying演算法就是最合算的

年老代常用mark-sweep;或者是mark-sweep/mark-compact的混合方式,一般情況下用mark-sweep,統計估算碎片量達到一定程度時用mark-compact。這是因為傳統上大家認為年老代的物件可能會長時間存活且存活率高,或者是比較大,這樣拷貝起來不划算,還不如採用就地收集的方式。

useserialgc、useparallelgc,雖然原始碼裡這個full gc的實現類叫做marksweep,實際上是典型的mark-compact而不是mark-sweep

16 三種基本的GC演算法基石

1.gc標記 清除演算法 由於記憶體中物件構成乙個樹,當記憶體耗盡時,程式停止 如果不停止新new物件時標記出錯 此時程式對物件進行標記和清除。缺點 停止程式執行,降低使用者體驗。且釋放的記憶體空間不連續。2.gc的複製演算法 先找出活動物件儲存到空白區域,然後把原來的物件空間清空。缺點 雖然活動空...

說說JVM的GC功能之一GC演算法的選擇

如果你的應用可以忍受full gc帶來的停頓,throught收集器 即並行gc 能獲得最高的效能。同是他使用cpu和堆的大小都比其他的收集器少 當然不包括serial收集器,它的使用場景太有限 如果無法忍受full gc帶來的停頓,如果可用堆較小,可以選擇cms或g1,如果可用堆較大,建議使用g1...

各種基本排序演算法的比較

給定n個 長整型範圍內的 整數,要求輸出從小到大排序後的結果。本題旨在測試各種不同的排序演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 只有1個元素 資料2 11個不相同的整數,測試基本正確性 資料3 103個隨機整數 資料4 104個隨機整數 資料5 105個隨機整數 資料6 105個...