標記-清除算法
標記之後清除所有標記過的對象,會產生大量的內存碎片,兩個階段效率都不高
複製算法
將內存分爲兩部分,第一部分的空間佔滿了就將還存活的對象, 複製到另一塊上,把用過的那一塊清除掉
現在的商業虛擬機新生代就是使用這種但是是劃分爲8:1:1 eden、 survivor0、 survivor1、每次就使用eden存放新建的對象, 如果eden內存不夠就將存活的對象複製到survivor0,survivor0內存不夠就複製到survivor1,
標記-整理算法
老年代使用的清除算法,將存貨的對象標記,然後向一端移動 將邊界之外的區域清除
Serial
單線程清除,新生代使用,使用時用戶線程會暫停
ParNew
Serial的多線程實現,默認與cpu數量一樣,使用時用戶線程任然會暫停
Parallel Scavenge
新生代收集器 複製算法 並行的多線程收集器 目標是達到可控制的吞吐量 (吞吐量=運行用戶代碼的時間/運行用戶代碼的時間+垃圾收集時間) 停頓時間越短就越適合需要與用戶交互的程序,良好的響應速度能提升用戶的體驗,高吞吐量 可以最高效率的利用CPU時間,儘快的完成程序的運算任務,主要適合在後臺運算而不需要太多交互的任務
Serial Old
Serial的老年代版本,單線程收集器,使用標記整理算法,配合parallel scavenge使用
Parallel Old
Parallel的老年版本 多線程和標記整理算法
CMS
以獲取最短回收時間爲目標的收集器,重視服務器的響應速度 標記-清除算法 初始標記 併發標記 重新標記 併發清除初始標記只是標記GC Roots能直接關聯到的對象, 併發標記就是進行GC Roots Tracing的過程,重新標記階段是爲了修正併發標記期間,用戶程序繼續運行而導致的標記產生變動的那部分對象的標記記錄 ,這個階段的停頓時間一般會比出師表及階段稍長一點,但比並發標記短。無法清除浮動垃圾, 可能出現Concurrent Mode Failure失敗而導致淋一次Full GC產生
G1
標記整理 不會產生空間碎片 非常精確的控制停頓 G1將整個java堆(新生代 老年代)劃分爲 多個大小固定的獨立區域,並且跟蹤這些區域裏面的垃圾堆積程度,在後臺維護一個優先列表, 每次允許的收集時間,優先回收垃圾最多的區域。
-
Minor GC 和Full GC
Minor GC 新生代的垃圾收集動作,頻繁發生,回收速度快
Major GC或者Full GC老年代的GC
JVM清除算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.