G1收集器

一、Young gc(STW)

触发时机:eden空间不足时,G1触发young gc回收新生代空间。
回收对象:每次young gc会选定所有新生代region,同时根据停顿时间动态调整新生代所占region个数来控制young gc开销。如果存在大对象,默认也会回收Humongous region。
回收算法:整体来看属于标记-整理,从局部region角度来看属于复制算法。
回收过程:young gc主要过程分为:
Root扫描,RS扫描,Evacuation(对象拷贝)。

二、Mixed gc

触发时机
主要由以下三个参数控制,回收过程会详解
InitiatingHeapOccupancyPercent(设置触发并发标记周期的Java堆占用阈值,默认45)。
G1MixedGCLiveThresholdPercent (会被MixGC的Region中存活对象占比,默认85),old generation region中的存活对象的占比,只有小于此参数,才会被选入CSet,避免mixed gc大量对象复制。
G1HeapWastePercent(触发Mixed GC的可回收空间百分比,默认10),在global concurrent marking结束之后,我们可以知道old gen regions中有多少空间要被回收,在每次YGC之后和再次发生Mixed GC之前,会检查垃圾占比是否达到此参数,只有达到了,才会触发Mixed GC。
回收对象:所有新生代region和部分老年代region,G1会选择回收部分老年代region来满足MaxGCPauseMillis(最大停顿时间)。
回收算法:整体来看属于标记-整理,从局部region角度来看属于复制算法。
回收过程
mixed gc主要过程分为全局并发标记和Evacuation对象拷贝,全局并发标记结束后会触发一次Young gc,接着进行mixed gc(满足条件的情况下)。

  • 全局并发标记
    达到InitiatingHeapOccupancyPercent阈值会触发全局并发标记,该阶段又可以近一步细分成下面几个步骤:
    初始标记(initial mark,STW)。它标记了从GC Root开始直接可达的对象。初始标记阶段借用young GC的暂停,因而没有额外的、单独的暂停阶段。
    并发标记(Concurrent Marking)。这个阶段从GC Root开始对heap中的对象标记,标记线程与应用程序线程并行执行,并且收集各个Region的存活对象信息。
    最终标记(Remark,STW)。标记那些在并发标记阶段发生变化的对象,将被回收。
    清除垃圾(Cleanup,部分STW)。 清除空Region,这个阶段如果发现完全没有活对象的region就会将其整体回收到可分配region列表中。
  • Mixed gc(STW)
    达到G1HeapWastePercent阈值会触发Mixed gc,该阶段主要做Evacuation(对象拷贝)。Evacuation阶段是全暂停的。它负责把一部分region里的活对象拷贝到空region里去(并行拷贝),然后回收原本的region的空间。Evacuation阶段可以自由选择任意多个region来独立收集构成收集集合(collection set,简称CSet),CSet集合中Region的选定依赖于上文中提到的停顿预测模型和G1MixedGCLiveThresholdPercent阈值,该阶段并不evacuate所有有活对象的region,只选择收益高的少量region来evacuate,这种暂停的开销就可以(在一定范围内)可控。
    mixed gc类似CMS对老年代的major gc,在CMS中其规则为只要老年代连续空间大于新生代对象总大小或历次晋升老年代平均值就进行minor gc,否则将进行major gc。
三、Full gc(STW)

触发条件
1、metaspace(方法区)可用空间不足。
2、G1在对象复制/转移失败或者没法分配足够内存(比如巨型对象没有足够的连续分区分配)时,会触发FullGC。full gc指退化为使用serial old收集器回收的情况,其为单线程STW型收集器,停顿时间可达秒级,对性能影响极大。但在jdk10版本的G1 GC会有很多优化,Full CG方面,将提供并发标记的Full GC方案:Parallelize Mark-Sweep-Compact。

四、其它

对象分配:
TLAB:本地线程分配缓冲,server端默认启用,位于Eden区。当多线程分配内存区块时,因为内存分配和初始化数据是不同的步骤,所以在分配时需要对内存区块上锁,由此会引发区块锁竞争问题。此参数会让线程预先分配一块属于自己的空间(64K-1M),分配时先在自己的空间上分配,不足时再申请,这样就不存在内存区块锁的竞争,提高分配效率。
Eden:正常对象分配位置。
Humongous region:大于G1HeapRegionSize阈值(region大小)的一半,会将对象分配到一个或多个连续的Humongous region。
参考:
https://www.redhat.com/en/blog/collecting-and-reading-g1-garbage-collector-logs-part-2#
https://blog.csdn.net/qq_27529917/article/details/86664677
//www.greatytc.com/p/548c67aa1bc0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容