JVM清除算法

  1. 標記-清除算法

    標記之後清除所有標記過的對象,會產生大量的內存碎片,兩個階段效率都不高

  2. 複製算法

    將內存分爲兩部分,第一部分的空間佔滿了就將還存活的對象, 複製到另一塊上,把用過的那一塊清除掉

    現在的商業虛擬機新生代就是使用這種但是是劃分爲8:1:1 eden、 survivor0、 survivor1、每次就使用eden存放新建的對象, 如果eden內存不夠就將存活的對象複製到survivor0,survivor0內存不夠就複製到survivor1,

  3. 標記-整理算法

    老年代使用的清除算法,將存貨的對象標記,然後向一端移動 將邊界之外的區域清除

  4. Serial

    單線程清除,新生代使用,使用時用戶線程會暫停

  5. ParNew

    Serial的多線程實現,默認與cpu數量一樣,使用時用戶線程任然會暫停

  6. Parallel Scavenge

    新生代收集器 複製算法 並行的多線程收集器 目標是達到可控制的吞吐量 (吞吐量=運行用戶代碼的時間/運行用戶代碼的時間+垃圾收集時間) 停頓時間越短就越適合需要與用戶交互的程序,良好的響應速度能提升用戶的體驗,高吞吐量 可以最高效率的利用CPU時間,儘快的完成程序的運算任務,主要適合在後臺運算而不需要太多交互的任務

  7. Serial Old

    Serial的老年代版本,單線程收集器,使用標記整理算法,配合parallel scavenge使用

  8. Parallel Old

    Parallel的老年版本 多線程和標記整理算法

  9. CMS

    以獲取最短回收時間爲目標的收集器,重視服務器的響應速度 標記-清除算法 初始標記 併發標記 重新標記 併發清除初始標記只是標記GC Roots能直接關聯到的對象, 併發標記就是進行GC Roots Tracing的過程,重新標記階段是爲了修正併發標記期間,用戶程序繼續運行而導致的標記產生變動的那部分對象的標記記錄 ,這個階段的停頓時間一般會比出師表及階段稍長一點,但比並發標記短。無法清除浮動垃圾, 可能出現Concurrent Mode Failure失敗而導致淋一次Full GC產生

  10. G1

    標記整理 不會產生空間碎片 非常精確的控制停頓 G1將整個java堆(新生代 老年代)劃分爲 多個大小固定的獨立區域,並且跟蹤這些區域裏面的垃圾堆積程度,在後臺維護一個優先列表, 每次允許的收集時間,優先回收垃圾最多的區域。

  11. Minor GC 和Full GC

    Minor GC 新生代的垃圾收集動作,頻繁發生,回收速度快

    Major GC或者Full GC老年代的GC

發佈了91 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章