ZGC垃圾收集器-JVM(十五)

这篇具有很好参考价值的文章主要介绍了ZGC垃圾收集器-JVM(十五)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上篇文章说了G1的特性,无分代,复制算法,大内存就可以用G1,可预测stw时间等特性。

G1垃圾收集分类-JVM(十四)
  • ZGC收集器

-XX:+UseZGC

ZGC(Z Garbage Collector)是在jdk11新加入的低延迟垃圾收集器。

Zgc有四个目标

  1. 支持至少TB级别堆内存回收。(目前4TB)
  2. STW保持在10ms之内。
  3. 吞吐量稍微降低,不会降低超过百分之15
  4. 奠定未来GC收集器的基础。

Oracle官方介绍,不会因为内存的增大而增大,意味着几十G的堆,gc停顿时间不会超过10ms。

Zgc暂时没有分代,因为内部算法太复杂,实现分代太麻烦,暂时用单代版本,后续会优化,可能就支持更高的TB内存服务器。

NUMA-aware

UMA(Uniform Memory Access Architecture)表示内存只有一块,所有CPU都在这块内存运行,那么就存在竞争关系,争夺内存的访问权,有竞争就有锁,必然影响效率,CPU内核越多则竞争越激烈。所以与之而来,有了NUMA(Non Uniform Memory Access Architecture)直接每个CPU对应独有的内存块,且在主板上,这个CPU离对应的内存块是最近的,自然性能很高。

  • ZGC运作过程

运作过程大致分为四个阶段,并发标记,并发预配重分配,并发重分配,并发重映射

  1. 并发标记(Concurrent Mark):与G1一样,可达性算法从GC roots遍历,初始标记(mark start)和最终标记(mark end)也会出现短暂停顿,与G1不同的是遍历的不是对象,而是指针,标记阶段会更新指针颜色

(cms和g1有三色标记,在对象头里,但是zgc的并发标记跟对象没关系,而是放在内存存储空间的指针上)

2、并发预备重分配(Concurrent Prepare for Relocate):这个阶段需要根据特定条件统计本次收集过程需要清理哪些region,将这些region组成重分配集(Relocation Set)。ZGC每次回收都会扫描所有的region,用范围更大的扫描成本换省去G1记忆集的成本。

3、并发重分配(Councurrent Relocate):重分配是ZGC核心阶段,这个过程要把重分配存活对象复制到新的region,并为重分配集的每个region维护一个转发表(Forward table),记录旧对象到新对象转换关系。Zgc收集器仅从引用就能知道对象是否处于重分配中,如果用户线程此时访问了重分配对象,这次访问会被预置的内存屏障(读屏障)所截获,然后根据region上转发表到新复制对象上,并同时修正该引用值,使其直接指向新对象,zgc这种行为称为指针的“自愈”能力。

4、并发重映射(Coucurrent Remp):重映射所做的就是修正整个堆中指向重分配集旧对象所有引用,但是ZGC自愈功能,所以这个重映射不是很迫切。ZGC巧妙的把重映射要做的工作,合并到下一次垃圾收集器循环并发标记阶段去完成,反正他要遍历所有对象,这样就可以节省开销。一旦所有指针被修正,原来记录新旧关系的转发表也可以释放。

  • 颜色指针

Coloored Pointers,颜色指针。

64位处理器,只需要42位来寻址,2^42则是4TB。后面版本jdk改为44位寻址,2^44则就是16TB。

另外四位做标记,比如marked1、marked0、finalizable标识和remapped标识。

Finalizable:就是三色标记,但不限于三种颜色,此位并发处理,表示对象通过此访问。

Remapped:对象未指向relocation set中,relocation set表示需要gc的region集合。

剩余18位还未使用,预留给以后使用。文章来源地址https://www.toymoban.com/news/detail-602946.html

到了这里,关于ZGC垃圾收集器-JVM(十五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JVM:垃圾收集器(7种)

    如果两个收集器之间存在连线,就说明它们可以搭配使用。它们说在的区域则表示这个收集器属于新生代收集器还是老年代收集器。其中Serial(串行)、Parallel(并行)         Serial收集器是最基础、历史最悠久的收集器,是HotSpot虚拟机新生代收集器的唯一选择。这个收集器

    2024年01月20日
    浏览(50)
  • JVM的故事——垃圾收集器

    新生代收集器,最基础的收集器,单线程。进行垃圾收集时必须暂停其他所有工作线程,stop the world 新生代收集器,实质上是serial收集器的多线程版本。除了serial,只有它能和CMS收集器(老年代收集器)配合工作。随着处理器核心数越来越多,parnew比serial有着更好的性能。(但如

    2024年02月10日
    浏览(51)
  • 08-JVM垃圾收集器详解

    上一篇:07-垃圾收集算法详解 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较,但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做

    2024年02月09日
    浏览(49)
  • JVM--- 垃圾收集器详细整理

    目录 一、垃圾收集需要考虑的三个事情: 二、垃圾回收针对的区域 三、如何判断对象已死         1.引用计数算法:         2.可达性分析算法 四、引用 五、生存还是死亡? 六、回收方法区 七、垃圾收集算法         1.分代收集理论 2.标记-清除算法         3.标记

    2024年02月19日
    浏览(74)
  • 深入理解JVM垃圾收集器

    相关系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的,从上图可以看到有连线的的垃圾收集器是可以组合使用,是年轻代+老年代。为什么会出现这么多的垃圾收集

    2024年04月09日
    浏览(51)
  • JVM-垃圾回收(标记算法,收集器)

    申明:文章内容是本人学习极客时间课程所写,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。 原资料地址:课程资料 垃圾回收的基本原理 1 什么是垃圾? 在内存中,没有被引用的对象就是垃圾。 2 如果找到垃圾对象? 引用计

    2024年02月21日
    浏览(54)
  • G1垃圾收集器-JVM(十三)

    上篇文章说了CMS垃圾收集器使用以及三色标记如何解决cms的一些问题。分别有初始标记,并发标记,重新标记,并发清理,并发重置。 CMS垃圾收集器三色标记-JVM(十二) G1收集器(Garbage-First) -XX:+UseG1GC 这是一款面向服务器的垃圾收集器,主要针对 设备多核cpu和大内存的机

    2024年02月16日
    浏览(66)
  • JVM垃圾回收算法和CMS垃圾收集器

    目录 判断一个对象是否死亡? 1、引用计数法  2、可达性分析算法 三色标记 垃圾收集算法 1、分代收集理论  2、垃圾回收算法 标记-清除 标记-复制 标记-整理 CMS(Concurrent Mark Sweep)收集器 CMS垃圾收集器步骤 CMS垃圾收集器优缺点 垃圾收集需要完成的三件事情: 哪些内存需

    2024年02月10日
    浏览(47)
  • 三种方式查看 JVM 垃圾收集器

            不同版本的 JVM 默认使用的垃圾收集器是不同的,目前的新生代和老年代的垃圾收集器如下图所示,新生代和老年代之间的连线表示这些垃圾收集器可以进行搭配使用         垃圾收集器的名字和  JVM 里面的参数对照表如下,即在 JVM 里面并不是存储的垃圾收

    2024年02月09日
    浏览(44)
  • 温故而知新-JVM垃圾收集器

    标记-清除 复制算法 标记-整理 现在垃圾收集器均采用分代收集策略,新生代由于98%的对象都是朝生夕死,复制算法更合适,只复制还存活的对象,工作量小,所以效率高。显然复制算法不适合老年代,因为老年代中的对象大部分是大对象,且长时间存活,复制算法效率太低

    2024年02月15日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包