美文网首页
谈谈G1( Garbage-First )垃圾回收器

谈谈G1( Garbage-First )垃圾回收器

作者: lenny611 | 来源:发表于2019-08-24 14:12 被阅读0次

前面介绍G1的时候,说到G1是介于新生代和老年代之间的垃圾回收器,其实是想说G1收集器采用一种不同的方式来分配堆。

堆内存被划分为固定大小的多个区域


G1的堆内存结构.png

每个heap区(Region)的大小在JVM启动时就确定了. JVM 通常生成 2000 个左右的heap区, 根据堆内存的总大小,区的size范围允许为 1Mb 到 32Mb。实际上,这些区域(regions)被映射为逻辑上的 Eden, Survivor, 和 old generation(老年代)空间.

G1的特点:
1.并行与并发,G1能充分利用多CPU、多核环境下的硬件优势,使用多个CPU (CPU或者CPU核心)来缩短Stop-The-World停顿的时间,部分其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让Java程序继续执行。
2.分代收集:与其他收集器一样,分代概念在G1中依然得以保留。虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但它能够采用不同的方式去处理新创建的对象和已经存活了一段时间、熬过多次GC的旧对象以获取更好的收集效果。
3.空间整合:与CMS的“标记一清理”算法不同,G1从整体来看是基于“标记一 整理”算法实现的收集器,从局部(两个Region之间).上来看是基于“复制”算法实现的,但无论如何,这两种算法都意味着G1运作期间不会产生内存空间碎片,收集后能提供规整的可用内存。这种特性有利于程序长时间运行,分配大对象时不会因为无法找到连续内存空间而提前触发下一次GC。
4.可预测的停顿:这是G1相对于CMS的另一大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在-一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒,这几乎已经是实时Java(RTSJ)的垃圾收集器的特征了。

G1垃圾收集器执行步骤:
1.初始标记(STW)
2.并发标记
3.最终标记(STW)
4.筛选回收

G1收集器运行示意图.png

初始标记阶段仅仅只是标记一下GC.Roots能直接关联到的对象,并且修改 TAMS (Next Top at Mark Start)的值,让下一阶段用户 程序并发运行时,能在正确可用的Region中创建新对象,这阶段需要停顿线程,但耗时很短。
并发标记阶段是从GC Root开始对堆中对象进行可达性分析,找出存活的对象,这阶段耗时较长,但可与用户程序并发执行。
最终标记阶段则是为了修正在并发标记期间因用户程序继续运作而导致标记产生变动的那一部分标记记录,虚拟机将这段时间对象变化记录在线程RememberedSetLogs里面,最终标记阶段需要RememberedSct:Logs的数据合并到RememberedSet中,这阶段需要停顿线程, 但是可并行执行。
筛选回收阶段首先对各个Rcgion的回收价值和成本进行排序,根据用户所期望的GC停顿时间来制定回收计划,这个阶段其实也可以做到与用户程序一起并发执行,但是因为只回收一部分Region,时间是用户可控制的,而且停顿用户线程将大幅提高收集效率。

相关文章

  • G1回收器

    G1回收器 G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的...

  • G1 垃圾回收器

    1、概述 G1 垃圾回收器(Garbage-First)并不新,是在 Java 7 update 4 时引入的一个...

  • 谈谈G1( Garbage-First )垃圾回收器

    前面介绍G1的时候,说到G1是介于新生代和老年代之间的垃圾回收器,其实是想说G1收集器采用一种不同的方式来分配堆。...

  • Java 垃圾回收器之G1详解

    Java 垃圾回收器之G1详解 概述 G1垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器。...

  • Java G1垃圾回收

    G1 垃圾收集器 Garbage-First (G1) 收集器是一种服务器式垃圾收集器,针对具有大内存的多处理器机...

  • 也谈G1垃圾回收器

    目前关于G1垃圾回收器的相关介绍很多,最近阅读了下oracle公司的说明,也想谈谈自己对于G1的理解,如果有...

  • G1垃圾回收器在并发场景调优

    一、序言 目前企业级主流使用的Java版本是8,垃圾回收器支持手动修改为G1,G1垃圾回收器是Java 11的默认...

  • G1垃圾回收器

    垃圾回收器的发展历程 背景 01、G1解决的问题 G1垃圾回收器是04年正式提出,12开始正式支持,在17年作为J...

  • 一篇文章搞懂G1收集器

    一、何为G1收集器 The Garbage-First (G1) garbage collector is a s...

  • JVM之G1垃圾回收器

    G1垃圾回收器 stop the world,这个是最痛的一个点!无论是新生代垃圾回收,还是老年代垃圾回收,都会或...

网友评论

      本文标题:谈谈G1( Garbage-First )垃圾回收器

      本文链接:https://www.haomeiwen.com/subject/qkxqectx.html