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