java jvm gc 垃圾回收機制 總結

垃圾回收方法(算法,垃圾收集器)

前提

  • jdk1.8以上(已經無永久代(Permanent Generation (PermGen),變成元空間(Metaspace))

算法

  1. 基礎算法
    複製算法(新生代使用)
    標記-清除算法(一般老生代使用)
    標記-整理算法(一般老生代使用)
  2. 分代收集算法(Generational Collection),就是平時我們總說的gc
    新生代一般使用複製算法,老生代一般使用標記-整理算法,元空間(過閥值就收集)

分代收集算法(Generational Collection)垃圾收集器怎麼區分

  • 是單線程還是多線程?
  • 階段不同?
  • 是否Stop The Word ?(業務線程是否停止)

垃圾收集器幾個問題

  • 是新生代,老生代還是新生代和老生代可以使用?

垃圾收集器類別

收集器 新/老生代 階段說明 單/多線程進行收集 是否Stop The Word 備註
Serial
ParNew Serial多線程版本
Parallel Scavenge 吞吐量高(其他都是Stop The Word時間短),用於後臺運算而不需要太多交互的任務
Serial Old Serial老年代版本
Par Old Parallel Scavenge老年代版本
CMS(Concurrent Mark Sweep) 1.初始標記2.併發標記3.重新標記4.併發清除 1,3階段 1.併發指的是與業務線程。2.有缺點。3.適合B/S。4.其爲標記-清除(其他爲標記整理),所以會產生碎片。
G1(Garbage First) 1.設置垃圾收集不超過多少毫秒2.劃分區域

備註:一般ParNew和CMS配合使用

垃圾回收器總結

-因爲使用的是分代收集算法(Generational Collection),所以 一般情況下,所有收集器新生代都使用複製算法,老生代都使用標記-整理算法

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