GC解释:收集器概述
當前版本的HotSpot JVM包括三種類型的垃圾收集器:
–串行收集器
–并行收集器
–多數同時收集者
它們都是世代的,這意味著它們利用了堆的劃分方式 。
垃圾收集器負責三個主要操作:
–查找不再使用的對象
–釋放這些對象之后的內存
–壓縮堆
并非所有收集器都以相同的方式執行這些操作,因此讓我們了解有關所有收集器的基本信息。 我們將在單獨的文章中介紹細節。
串行收集器
顧名思義,該收集僅由一個線程執行。 在次要和完全GC期間都必須停止世界(STW)。
該收集器對年輕一代使用標記復制算法,而對老一代則使用標記清除緊湊算法進行清理。
串行GC專為單線程環境(通常是客戶端類計算機)和較小的堆而設計。 可以通過-XX:+UseSerialGC標志啟用它。
并行(吞吐量)收集器
Young集合由多個線程并行化,這使Minor GC更快。 結果,此收集器導致較短但更頻繁的Young收集STW暫停。 從JDK 7u4開始,默認情況下還會由多個線程收集“舊世代”(并且還會導致世界停頓)。 在JDK 7u4之前,需要-XX:+UseParallelOldGC標志來啟用舊一代的并行處理。 現在, -XX:+UseParallelGC和-XX:+UseParallelOldGC標志都啟用了吞吐量收集器,并同時處理了老一代和年輕一代。
該收集器還在Young Generation中使用mark-copy算法,在Old Generation中使用mark-sweep-compact,但是復制和壓縮階段均由多個線程執行。
要配置GC線程數,可以使用-XX:ParallelGCThreads=X標志。 默認值設置為CPU內核數。
什么時候使用并行GC是個不錯的選擇? 好吧,基本上,只要吞吐量比延遲更重要。
大多數同時收集者
它們被稱為低暫停收集器-旨在最大程度地減少停頓的暫停并保持應用程序盡可能的響應
并發標記和掃描(CMS)
使用并行標記復制算法在多個線程中執行次要GC。 然后將停止所有應用程序線程。 老式服務器通常是同時收集的-當后臺GC線程掃描老式服務器時,應用程序線程會暫停很短的時間。 Major GC期間使用的實際算法是并發標記掃描。 您可能已經注意到,“掃描”之后沒有“壓縮”。 沒錯–并發標記和清除是不會壓縮使用權空間的收集器,因此內存可能會碎片化。 由于缺乏堆壓縮,當GC無法將新對象放入內存時,JVM會回退到串行mark-sweep-compact算法以對舊一代進行碎片整理和壓縮。 那就是性能下降的時候–所有應用程序線程都停止了,只有一個線程負責清理和壓縮Tenured空間。
如前所述,CMS是低暫停收集器的一個示例。 這意味著當延遲是主要目標而不是吞吐量時,這是一個不錯的選擇-因為吞吐量可能由于CPU消耗的增加而降低(在應用程序線程運行時掃描堆不是免費的)。
-XX:+UseConcMarkSweepGC啟用CMS收集器。 過去可以使用-XX:-UseParNewGC (單號“ UseParNewGC”之前的負號,因此使用此標志將禁用Parallel New(Young)GC)來配置具有單線程Young Generation集合的CMS,但已棄用在Java 8中已刪除,在Java 9中已刪除。
G1GC
垃圾優先(G1)是一種新的低中斷垃圾收集器,旨在以最小的暫停處理大型堆。 堆分為固定大小的幾個區域(同時仍保持堆的世代性質)。 這種設計使我們可以在處理整個“年輕一代”或“老一代”時擺脫長時間的STW暫停。 現在,可以分別收集每個區域,這將導致STW停頓時間更短但更頻繁。 G1將對象從一個區域復制到另一個區域,這意味著堆至少已部分壓縮。
G1使用mark-sweep-compact算法的增量版本。 可以通過指定-XX:+UseG1GC標志來啟用它。
摘要
這是本文討論的收集器的簡單比較:
| 序列號 | 沒有 | 是 | 是 | 是 | – |
| 平行 | 是 | 是 | 是 | 是 | 通量 |
| 內容管理系統 | 是 | 是 | 僅在掃描期間 | 沒有 | 潛伏 |
| G1 | 是 | 是 | 很短的 | 部分地 | 潛伏 |
還有一些其他垃圾收集器,但它們不是HotSpot JVM的一部分。 這些是:
- C4(Azul Zing JVM)
- 雪蘭多
- 平衡(IBM J9 JVM)
在Java 8中,服務器級計算機的默認GC是Parallel Collector。 G1GC在Java 9中將是默認的。默認情況下,客戶端類計算機運行Serial Collector。
翻譯自: https://www.javacodegeeks.com/2017/09/gc-explained-collectors-overview.html
總結
以上是生活随笔為你收集整理的GC解释:收集器概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑如何连接手机热点上网笔记本电脑如何连
- 下一篇: 谷歌guava_使用Google Gua