ZGC

2020-03-25  本文已影响0人  技术灭霸

ZGC介绍

Z Garbage Collector,即ZGC,基于Region内存布局,不设置分代, 使用了读屏障, 染色指针和内存多重映射等技术实现的可并发标记-整理算法的,是一个可伸缩的、低延迟的垃圾收集器,主要为了满足如下目标进行设计:

和G1开启很像,用下面参数即可开启:

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

ZGC特性

(1)Concurrent

ZGC只有短暂的STW,大部分的过程都是和应用线程并发执行,比如最耗时的并发标记和并发移动过程。

(2)Region-based

ZGC中没有新生代和老年代的概念,只有一块一块的内存区域page,这和G1的region有点像,但和G1不一样的是,region的大小更加灵活和动态。zgc的region不会像G1那样在一开始就被划分为固定大小的region。

zgc的region核心亮点就是:动态

动态表现为:

  1. 动态地创建和销毁。
  2. 动态地决定region的大小。它的最小单位是2MB的一个块。然后每个region的大小就是是2MB*N就是。

(3)Compacting

每次进行GC时,都会对page进行压缩操作,所以完全避免了CMS算法中的碎片化问题。

(4)NUMA-aware

(2)Colored Pointers

是zgc的一个核心概念。你还可以叫它tag pointers,version pointers。

和以往的标记算法比较不同,CMS和G1会在对象的对象头进行标记,而ZGC是标记对象的指针。


在这里插入图片描述

一个pointer共64bit。开始的18bit暂时没有被用到(以后有可能要用),然后是四个bit,分别表示Finalizable、Remapped、Marked1、Marked0,这是gc过程中每个对象的状态。最后42bit是用来存储对象的地址。

(3)Using load barriers

因为在标记和移动过程中,GC线程和应用线程是并发执行的,所以存在这种情况:对象A内部的引用所指的对象B在标记或者移动状态,为了保证应用线程拿到的B对象是对的,那么在读取B的指针时会经过一个 “load barriers” 读屏障,这个屏障可以保证在执行GC时,数据读取的正确性。

上一篇 下一篇

猜你喜欢

热点阅读