天天看點

jvm G1垃圾收集器

名詞解釋:     并行 是 =     并發 是 >

串行:單線程,stop-the-world ,-XX:+UseSerialGC 并行:多線程,stop-the-world , -XX:+UseParallerGC cms:年輕代與并行收集器相似, -XX:+UseConcurrentMarkSweepGC,老年代收集線程與應用線程同時工作,在初始标記和重新标記時,會stop-the-world,缺點:和應用線程競争cpu,優點:停頓較短,老年代被占閥值,适合于追求更高吞吐量且能容忍更長GC暫停的應用。

G1:混合垃圾收集器,将堆拆成一系列的分區,一段時間内,大部分垃圾收集操作隻在一個區内執行。老年代與年輕代記憶體空間可互相占用。 年輕代收集方式為并行。老年代收集是按一塊分區來進行的,一個時刻隻有一塊被收集,并且會伴随着一次年輕代收集,老年代超過堆占用閥值進行一次并發stop-the-world方式的初始标記 初始标記(伴随年輕代同時進行) -》 并發多線程标記,标記老年代的存活對象 -》并行重新标記,标記初始标記時被應用線程占用所錯過的對象-》當某塊老年代沒有一個存活對象,則清除。 G1暫停主要是年輕代的收集和混合收集 G1設計目标是限定較大的記憶體空間和指定GC停頓時間,他采用啟發式算法 G1分區尺寸在1M-32M之間,是2的幂方 收集過程中會有一個收集分區的集合,稱為CSet RSet(remembered set)每個分區有一個記憶集合,用來記憶分區外對分區内的引用。 年輕代分為: eden(新生代) 與 survivor(存活代) 老年代的空間占用達到占用門檻會進行老年代,預設45%,可通過-XX:InitiatingHeapOccupancyPercent設定。 巨型對象:超過分區50%,用連續分區來存儲,無連續分區是會啟動fullGc G1的full GC 與串行收集算法相同 G1周期有5個階段:初始标記-》并發根分區掃描-》并發标記-》重新标記-》清除 初始标記:收集所有對象的起點,stop-the-world 根分區掃描: 并發的進行根分區掃描,不會暫停 并發标記:不會發生stop-the-world 重新标記:非常短暫的stop-the-world 清除:找出沒有存活對象的分區并回收。 堆空間調整:G1整堆尺寸是分區尺寸的整倍數,對象配置設定失敗後,會擴大堆尺寸,建立分區來存放對象。