美文网首页jvm
Java JVM ZGC垃圾回收器

Java JVM ZGC垃圾回收器

作者: zhglance | 来源:发表于2021-02-09 11:14 被阅读0次

    1.ZGC简介

    ZGC(Z Garbage Collector)是一款基于Region内存布局(有点类似于G1)的,不设置分代的,使用了读屏障、染色体指针和内存多重映射等技术来实现可并发标记-整理算法的,以低延迟为首要目标的一款垃圾收集器。旨在尽可能对吞吐量影响不大的前提下,实现在任意堆内存大小都可以把垃圾收集的停顿时间限制在10ms以内的低延迟。

    主要特点:

    1.ZGC不分代,每次垃圾回收都是全量内存进行标记,每次相当于Full GC,但回收的时候可采取部分回收的策略;
    2.内存分区管理,分成小中大三种分区粒度;
    3.仅支持Linux 64位系统,不支持Window;
    4.具有读屏障,实现并发标记和并发转移的处理;
    5.不支持指针压缩;
    6.具有染色体指针,实现并发标记、转移和重定位;
    7.小分区优先回收,中分区和大分区尽量不回收;
    8.针对多核,支持非统一内存访问,即NUMA(Non-Uniform Memory Access),小分区优先分配到CPU的本地内存中,中大分区则交由操作系统处理。

    1.1 Java各种GC的并发比较

    Java各种GC的并发比较.jpg

    2.ZGC实现原理

    1.2 ZGC的Region

    • Small Region: 固定为2MB,存放小于256KB的小对象;
    • Medium Region: 固定为32MB,存放大于等于256KB且小于4MB的对象;
    • Large Region: 容量固定,但必须是2MB的整数倍,存放大于等于4MB的对象,一个Large Region只会存放一个大对象,因此实际Large Region可能会小于Medium Region,最小为4MB,Large Region是不会被重分配,因为复制一个大对象代价昂贵。
    ZGC-Region.jpg

    1.2 ZGC的染色体指针(colored pointer)

    染色体指针.jpg
    • Finalizable:标识对象只能通过finalizable()访问;
    • Remapped:标识引用是最新的,即对象是否在重定向后的集合中;
    • Marked1:用于标记可达对象;
    • Marked0:保留位,将来可能会使用。

    相关文章

      网友评论

        本文标题:Java JVM ZGC垃圾回收器

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