新聞中心
回顧傳統垃圾回收器
HotSpot 垃圾收集器實現
網站建設公司,為您提供網站建設,網站制作,網頁設計及定制網站建設服務,專注于企業(yè)網站設計,高端網頁制作,對成都廣告推廣等多個行業(yè)擁有豐富的網站建設經驗的網站建設公司。專業(yè)網站設計,網站優(yōu)化推廣哪家好,專業(yè)營銷推廣優(yōu)化,H5建站,響應式網站。- 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 ituses 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 (并發(fā)標記清除)
Young generation collections 通常不會造成長時間停頓,然而old generation collections卻是是造成長時間停頓的,雖然它不長出現,特別是在大的heaps回收被涉及到的時候。為了處理這個問題,HotSpot JVM 引入了一個叫做
concurrent mark-sweep(CMS) collector
,通常也被稱為低延時收集器low-latency collector
.適用場景: 僅適用于老年代,新生代處理方式和Parallel Collector相同。
G1目標
G1 is planned as the long term replacement for the Concurrent Mark-Sweep Collector.計劃將G1作為CMS收集器的長久替代物。
它是為了平衡 延時和吞吐量之間的一種最優(yōu)關系。
G1實現原理
基本屬性
- CMS Replacement(CMS替代物)
- Server 'Style' Garbage Collector(服務端垃圾收集器-內存,核數區(qū)別)
- Parallel 并行
- Concurrent 并發(fā)
- Generational 分代
- Good Throughput 良好的吞吐量
- Compacting 壓縮
- Improved ease-of-use 提升了易用性(更多的JVM參數可用)
- Predictable(though not hard real-time) 可預估的,非絕對實時。
基本概念
- G1 堆布局
G1將堆分成若干固定大小的Region/區(qū)域(區(qū)域大小只有1、2、4、8、16和32M),G1的新生代和老年代都是一個無需連續(xù)的區(qū)域集合,每一個區(qū)域獨立進行內存的分配和回收,區(qū)域是內存管理的基本單元,在某一個時間節(jié)點,可能是空閑的,當內存被請求時,內存管理器將空閑的Region分配到某個分代,然后歸還應用分配給的空間。
大多數情況下,GC的操作同一時間只會在一個區(qū)域進行。
Region 分布
超大對象(Humongous Objects)
下圖中跨區(qū)域的灰色模塊即代表了超大對象,超大對象是指那些空間大小
>=1/2
個區(qū)域空間的對象.超大對象有時候會被以下特殊方式處理:- 每個超大對象在老年代區(qū)域中的連續(xù)區(qū)域分配。對象分配起始于在連續(xù)區(qū)域中的首個成員,如果連續(xù)區(qū)域中的最后一個區(qū)域存在剩余空間的話,那么該空間將失去分配的機會,直到其關聯的超大對象被完全回收
- 超大對象的回收通常僅在Cleanup停頓中的Marking結束后、或者在Full GC時。
- 超大對象的分配可能造成垃圾收集停頓過早地發(fā)生(主要是因為空間浪費。)
- 超大對象絕不會發(fā)生移動,即使在沒有Full GC的情況下
回收周期
- Young-only
Young-only 階段的垃圾收集時逐漸地將老年代的對象填充到當前可用的內存。即將可以提升的新生代對象提升到老年代。
該階段開始于Young-only的收集動作,也就是下圖中的藍色小球,每一個小球都是一次收集動作,也就是提升對象到老年代。Young-only 與Space-reclamation 過渡實際上是開始于
老年代空間 *占用*
達到某個閾值,即Heap初始化占用閾值。此時,G1將調度Initial Mark的Young-only收集(藍色大球),而非常規(guī)的Young-only(藍色小球)收集。Initial Mark
此類收集開始于標記過程,附帶一個常規(guī)的Young-only收集,并發(fā)標記決定所有在老年代區(qū)域中可達的存活對象是否要遺留到Space-reclamation 階段。當標記過程未結束時,常規(guī)的Young-only 收集可能已經發(fā)生,等到標記完成時,將伴隨著兩個特殊的
Stop-The-World
停頓,Remark
和CleanUp
.Remark 停頓
因為在
Initial Mark
標記過程中,因為它是并發(fā)執(zhí)行,有可能會發(fā)生Young-only
收集,造成標記數據有誤差,因此需要重新標記一次,該過程為串行執(zhí)行,會造成Stop-The-World
.在Remark 和Cleanup之間,G1將并發(fā)地計算出一份對象存活性總結報告,它將在Cleanup停頓階段更新內部的數據結構
Cleanup 停頓
該停頓同樣將完整的回收空閑區(qū)域,并且決定
Space-reclamation
階段是否需要繼續(xù)跟蹤,如果繼續(xù)跟隨的話,Young-only階段的完成僅僅做Young-only
收集動作。- Space-reclamation
Space-reclamation(空間回收/復用)階段是回收老年代空間,同時處理新生代。
這個階段由多個混合的收集動作組成,不僅包含新生代區(qū)域,同時也會排除老年代區(qū)域的存活對象,當G1發(fā)覺依然無法滿足空閑的空間請求時,G1會終止本階段。如果應用消耗完內存,G1將執(zhí)行
Stop-The-World
的全堆壓縮(Full GC)。如下圖所示:
2種過程是循環(huán)往復收集。
G1指令細節(jié)
初始空間占用
Initiating Heap Occupancy Percent(IHOP): Initial Mark 收集觸發(fā)的閾值,為老年代空間定義Heap占用的百分比。
JVM 設置參數:-XX:InitiatingHeapOccupancyPercent
默認情況下,根據標記時間以及老年代在標記周期中的內存分配,G1垃圾收集器將自動抉擇理想的IHOP的值。
JVM 失效參數:-XX:-G1UseAdaptiveIHOP
修改區(qū)域空間大小
-XX:G1HeapRegionSize
G1 Vs. 傳統垃圾回收器
G1 不區(qū)分新/老生代,只區(qū)分Region
- G1 收集分2個階段
Young-only
和Space-reclamation
創(chuàng)新互聯www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節(jié)活動現已開啟,新人活動云服務器買多久送多久。
文章題目:[JVM相關]Java新型垃圾回收器(GarbageFirst,G1)-創(chuàng)新互聯
地址分享:http://www.dlmjj.cn/article/eigoi.html