jvm gc小结

image.png

注:图中有连线相连的,表示可以搭配使用,如新生代ParNew + 老年代CMS。

YoungGC = MinorGC:对新生代进行回收,在Eden区满的时候触发;

FullGC:新生代+老年代同时回收,即对整个堆进行回收,老年代满了会触发。

1、新生代收集器(Eden + S0 + S1,标记复制)

  1. Serial

    1. 单线程版本,只有一个gc线程;

    2. gc线程与用户线程串行执行,STW;

    3. 适用于:client模式下,虚拟机内存分配不大、单cpu环境时,减少切换开销,高效执行回收;

  2. ParNew

    1. 多线程版本的serial收集器,策略等完全一样;

    2. 多个gc线程并行回收,专注于减少STW时长,提升响应速度;

    3. 更适合用于,与用户交互的程序;stw越短体验越好

  3. Parallel Scavenge

    1. 多gc线程并行收集

    2. 自适应策略,自动调节新老代大小比例等参数,专注于可控制的吞吐量(吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间))

    3. 更适用于非用户交互的后台计算程序等;

2、老年代收集器

  1. Serial old

    1. Serial 收集器的老年代版本;

    2. 适用于client模式下的老年代收集;

    3. 作为CMS收集器的后备预案,在并发收集发射Concurrent Mode Failure时使用;
      image.png
  2. Parallel Old

    1. Parallel Scavenge 的老年代版本;

    2. 多线程 + 标记整理算法;

    3. 与Parallel Scavenge(新生代回收)组合,实现【吞吐量优先】目标;

      image.png

  3. CMS

    1. 以实现最短STW时间为目的,适用于注重响应速度、用户体验的服务;

    2. 主要步骤:
      image.png
      1. 初始标记:仅标记GC Roots能够关联的对象,STW时间很短;

      2. 并发标记:与用户线程并发执行,无STW,用于GC Roots Tracing的分析过程,耗时较长;

      3. 重新标记:用于修正并发标记期间由于用户线程同时执行导致标记变动的记录,STW时间较短,但比初始标记长;

      4. 并发清除:与用户线程同时进行,清除标记的垃圾;

    3. 存在的问题:

      1. 采用标记清除算法,产生碎片,导致频繁的FullGC,可以设置-XX:+UseCMSCompactAtFullCollection(默认开启),在FullGC时进行内存碎片整理;可以设置-XX:CMSFullGCsBeforeCompaction,标识执行多少次不带压缩的FullGC后执行一次带压缩的;

      2. 对cpu资源敏感,gc线程占用cpu资源导致吞吐量下降。默认启动线程数是 (CPU数量 + 3)/4,如果只有一两个cpu,则吞吐量将下降50%!!!

      3. 易产生“浮动垃圾”:由于并发清除阶段,用户线程在并发执行产生的新的垃圾得不到及时回收;用户线程的执行也需要预留足够的空间,如预留空间不够,则会出现Concurrent Mode Failure,只能使用Serial old收集器重新收集,导致STW更长!!!

  4. G1(Garbage First)

    1. 多线程可以与用户线程并发执行;

    2. 不会产生碎片:基于region的设计,整体采用标记整理算法,局部两个region之间基于复制算法实现;
      image.png
    3. 可控可预测的STW时间:记录维护各个region的回收价值,优先收集回收价值高的region(只回收部分region,避免回收整个老年代)

    4. 主要步骤:
      image.png
      1. 初始标记:类比CMS

      2. 并发标记:类比CMS

      3. 最终标记:类比CMS

      4. 筛选回收:不同于CMS,根据用户设定的允许收集时长,选取部分高回收价值的region,优先收集。

        1. 避免FullGC,可控STW时间

        2. 不牺牲吞吐性能

        3. 不会产生内存碎片,有利于长期运行;

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