摘要:適用收集場景新生代收集老年代收集并行收集器又叫吞吐量收集器應用于多核系統。它是為了平衡延時和吞吐量之間的一種最優關系。
回顧傳統垃圾回收器
HotSpot 垃圾收集器實現
Serial Collector(串型收集器)
使用場景,大多數服務器是單核CPU。適用收集場景:1. 新生代收集(Young Generation Collection)2. 老年代收集(Old Generation Collection)
Parallel Conllector(并行收集器)
又叫吞吐量收集器(throughput collector)應用于多核系統。適用收集場景:1. 新生代收集是并行處理。2. 老年代收集和Serial Collector一樣。
Parallel Compacting Collector(并行壓縮收集器)
The parallel compacting collector was introduced in J2SE 5.0 update 6. The difference between it and the parallel collector is that it uses a new algorithm for old generation garbage collection.Note : Eventually, the parallel compacting collector will replace the parallel collector.
上述文字中斜體文字告訴我們,這個收集器和上一個并行收集器唯一的不同是在老年代使用了新的算法。
適用收集場景:1. 新生代收集(Young Generation Collector) 和Parallel Collector 相同;2. 老年代收集(Old Generation Collector)
Concurrent Mark-Sweep (CMS) Collector (并發標記清除)
Young generation collections 通常不會造成長時間停頓,然而old generation collections卻是是造成長時間停頓的,雖然它不長出現,特別是在大的heaps回收被涉及到的時候。為了處理這個問題,HotSpot JVM 引入了一個叫做 concurrent mark-sweep(CMS) collector,通常也被稱為低延時收集器low-latency collector.G1目標適用場景: 僅適用于老年代,新生代處理方式和Parallel Collector相同。
G1 is planned as the long term replacement for the Concurrent Mark-Sweep Collector. 計劃將G1作為CMS收集器的長久替代物。G1實現原理它是為了平衡 延時和吞吐量之間的一種最優關系。
CMS Replacement(CMS替代物)
Server "Style" Garbage Collector(服務端垃圾收集器-內存,核數區別)
Parallel 并行
Concurrent 并發
Generational 分代
Good Throughput 良好的吞吐量
Compacting 壓縮
Improved ease-of-use 提升了易用性(更多的JVM參數可用)
Predictable(though not hard real-time) 可預估的,非絕對實時。
G1 堆布局
G1將堆分成若干固定大小的Region/區域(區域大小只有1、2、4、8、16和32M),G1的新生代和老年代都是一個無需連續的區域集合,每一個區域獨立進行內存的分配和回收,區域是內存管理的基本單元,在某一個時間節點,可能是空閑的,當內存被請求時,內存管理器將空閑的Region分配到某個分代,然后歸還應用分配給的空間。
大多數情況下,GC的操作同一時間只會在一個區域進行。
Region 分布
超大對象(Humongous Objects)
下圖中跨區域的灰色模塊即代表了超大對象,超大對象是指那些空間大小 >=1/2 個區域空間的對象.超大對象有時候會被以下特殊方式處理:
每個超大對象在老年代區域中的連續區域分配。對象分配起始于在連續區域中的首個成員,如果連續區域中的最后一個區域存在剩余空間的話,那么該空間將失去分配的機會,直到其關聯的超大對象被完全回收
超大對象的回收通常僅在Cleanup停頓中的Marking結束后、或者在Full GC時。
超大對象的分配可能造成垃圾收集停頓過早地發生(主要是因為空間浪費。)
超大對象絕不會發生移動,即使在沒有Full GC的情況下
回收周期
Young-only
Young-only 階段的垃圾 收集 時逐漸地將老年代的對象填充到當前可用的內存。即將可以提升的新生代對象提升到老年代。
該階段開始于Young-only的 收集 動作,也就是下圖中的藍色小球,每一個小球都是一次收集動作,也就是提升對象到老年代。Young-only 與Space-reclamation 過渡實際上是開始于老年代空間 *占用* 達到某個閾值,即Heap初始化占用閾值。此時,G1將調度Initial Mark的Young-only收集(藍色大球),而非常規的Young-only(藍色小球)收集。
Initial Mark
此類收集開始于標記過程,附帶一個常規的Young-only收集,并發標記決定所有在老年代區域中可達的存活對象是否要遺留到Space-reclamation 階段。當標記過程未結束時,常規的Young-only 收集可能已經發生,等到標記完成時,將伴隨著兩個特殊的Stop-The-World停頓,Remark和CleanUp.
Remark 停頓
因為在Initial Mark標記過程中,因為它是并發執行,有可能會發生Young-only收集,造成標記數據有誤差,因此需要重新標記一次,該過程為串行執行,會造成Stop-The-World.
在Remark 和Cleanup之間,G1將并發地計算出一份對象存活性總結報告,它將在Cleanup停頓階段更新內部的數據結構
Cleanup 停頓
該停頓同樣將完整的回收空閑區域,并且決定Space-reclamation階段是否需要繼續跟蹤,如果繼續跟隨的話,Young-only階段的完成僅僅做Young-only收集動作。
Space-reclamation
Space-reclamation(空間回收/復用)階段是回收老年代空間,同時處理新生代。
這個階段由多個混合的收集動作組成,不僅包含新生代區域,同時也會排除老年代區域的存活對象,當G1發覺依然無法滿足空閑的空間請求時,G1會終止本階段。如果應用消耗完內存,G1將執行Stop-The-World的全堆壓縮(Full GC)。
如下圖所示:
2種過程是循環往復收集。
G1指令細節Initiating Heap Occupancy Percent(IHOP): Initial Mark 收集觸發的閾值,為老年代空間定義Heap占用的百分比。
JVM 設置參數:-XX:InitiatingHeapOccupancyPercent
默認情況下,根據標記時間以及老年代在標記周期中的內存分配,G1垃圾收集器將自動抉擇理想的IHOP的值。
JVM 失效參數:-XX:-G1UseAdaptiveIHOP
修改區域空間大小
-XX:G1HeapRegionSizeG1 Vs. 傳統垃圾回收器
G1 不區分新/老生代,只區分Region
G1 收集分2個階段Young-only 和Space-reclamation
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75844.html
摘要:并發標記清除垃圾回收器,使用多個線程來掃描堆內存并標記可被清除的對象,然后清除標記的對象。垃圾回收器應用于大的堆內存空間。它將堆內存空間劃分為不同的區域,對各個區域并行地做回收工作。它會通過把重復的值移動到同一個數組來優化堆內存占用。 本文非原創,翻譯自Types of Java Garbage Collectors在Java中為對象分配和釋放內存空間都是由垃圾回收線程自動執行完成的。...
摘要:在這種消耗很高的狀態下,應用程序所有的線程都會掛起,暫停一切正常的工作,等待垃圾回收的完成。但是,因為線程切換和上下文轉換的消耗,會使得垃圾回收的總體成本上升,造成系統吞吐量的下降。 Java 垃圾回收(GC) 泛讀 文章地址: https://segmentfault.com/a/1190000008922319 0. 序言 帶著問題去看待 垃圾回收(GC) 會比較好,一般來說主要的...
摘要:虛擬機所處的區域,則表示它是屬于新生代收集器還是老年代收集器。虛擬機總共運行了分鐘,其中垃圾收集花掉分鐘,那么吞吐量就是。收集器線程所占用的數量為。 本文主要從GC(垃圾回收)的角度試著對jvm中的內存分配策略與相應的垃圾收集器做一個介紹。 注:還是老規矩,本著能畫圖就不BB原則,盡量將各知識點通過思維導圖或者其他模型圖的方式進行說明。文字僅記錄額外的思考與心得,以及其他特殊情況 內存...
閱讀 2831·2021-09-28 09:45
閱讀 1506·2021-09-26 10:13
閱讀 897·2021-09-04 16:45
閱讀 3661·2021-08-18 10:21
閱讀 1083·2019-08-29 15:07
閱讀 2632·2019-08-29 14:10
閱讀 3146·2019-08-29 13:02
閱讀 2458·2019-08-29 12:31