本文旨在 快速瞭解 G1垃圾收集器是什麼,有什麼特色,原理是什麼,經常使用的配置參數有哪些,與CMS垃圾收集器相比有什麼優點算法
廢話不bb,正文開始!併發
G1 是一種面向服務端的垃圾收集器,應用在多核處理器和大容量內存環境中,在實現高吞吐量的同時,儘量的知足垃圾收集器的暫停時間要求。性能
像 CMS 收集器同樣,能與應用程序線程併發執行。spa
整理空閒空間更快,
須要更多的時間來預測 GC 停頓時間,
不但願犧牲大量的吞吐性能,不須要更大的 JAVA Heap。
複製代碼
G1 收集器的設計目的是取代 CMS 收集器。線程
G1 垃圾收集器是一個有整理內存過程的垃圾收集器,不會產生不少內存碎片。
G1 的 Stop The World 更可控,G1 在停頓上添加了預測機制,用戶能夠指按期望的停頓時間。
複製代碼
G1 是在 2012 年纔在 jdk.1.7u4 中能夠呀用,在 jdk9 中將 G1 變成默認垃圾收集器來代替 CMS。它是一款面向服務應用的收集器。設計
主要改變是 Eden、Survivor 和 Tenured 等內存區域再也不是連續的,而是變成了一個個大小同樣的 region
每一個 region 從 1M 到 32M 不等,一個 region 有可能屬於 Eden、Survivor 或者 Tenured 內存區域。
複製代碼
一、Region 區域化垃圾收集器:最大好處是化整爲零,避免全內存掃描,只須要按照區域來進行掃描便可。code
二、回收步驟,四步過程:cdn
初始標記:標記一下GC Roots能直接關聯到的對象,須要停頓線程,但耗時很短
併發標記:是從GC Root開始對堆中對象進行可達性分析,找出存活的對象,這階段耗時較長,但可與用戶程序併發執行
最終標記:修正在併發標記期間因用戶程序繼續運做而致使標記產生變更的那一部分標記記錄
篩選回收:對各個Region的回收價值和成本進行排序,根據用戶所指望的GC停頓時間來制定回收計劃
複製代碼
-XX:UseG1GC對象
-XX:G1HeapRegionSize=n:設置G1區域的大小,值是2的冪blog
-XX:MaxGCPauseMillis=n:設置並行收集最大暫停時間
沒有內存碎片 能夠精確控制停頓