网站建设 个人服务器,如何申请小程序,wordpress查询数据库页面,建工网首页ZGC垃圾收集器
ZGC#xff08;“Z”并非什么专业名词的缩写#xff0c;这款收集器的名字就叫作Z Garbage Collector#xff09;是一款在JDK 11中新加入的具有实验性质[1]的低延迟垃圾收集器#xff0c;是由Oracle公司研发的。
ZGC收集器是一款基于Region内存布局的#…ZGC垃圾收集器
ZGC“Z”并非什么专业名词的缩写这款收集器的名字就叫作Z Garbage Collector是一款在JDK 11中新加入的具有实验性质[1]的低延迟垃圾收集器是由Oracle公司研发的。
ZGC收集器是一款基于Region内存布局的暂时不设分代的使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的以低延迟为首要目标的一款垃圾收集器。 ZGC的Region具有动态性——动态创建和销毁以及动态的区域容量大小。可以具有大、中、小三类容量 小型RegionSmall Region容量固定为2MB用于放置小于256KB的小对象。 中型RegionMedium Region容量固定为32MB用于放置大于等于256KB但小于4MB的对象。 大型RegionLarge Region容量不固定可以动态变化但必须为2MB的整数倍用于放置 4MB或以上的大对象。每个大型Region中只会存放一个大对象但它的实际容量完全有可能小于中型Region最小容量可低至4MB。 染色指针技术Colored Pointer 染色指针是一种直接将少量额外的信息存储在指针上的技术。 64位的Linux则分别支持47位128TB的进程虚拟地址空间和46位64TB的物理地址空间64位的Windows系统甚至只支持44位16TB的物理地址空间。 ZGC的染色指针技术将46位指针宽度的高4位取出来存储4个标志信息通过这些标志位虚拟机可以直接从指针中看到其引用对象的三色标记状态、是否进入了重分配集即被移动过、是否只能通过finalize()方法才能被访问到如图3-20所示。当然由于这些标志位进一步压缩了原本就只有46位的地址空间也直接导致ZGC能够管理的内存不可以超过4TB2的42次幂。 三大优势 染色指针可以使得一旦某个Region的存活对象被移走之后这个Region立即就能够被释放和重用掉而不必等待整个堆中所有指向该Region的引用都被修正后才能清理。 染色指针可以作为一种可扩展的存储结构用来记录更多与对象标记、重定位过程相关的数据以便日后进一步提高性能。 染色指针可以大幅减少在垃圾收集过程中内存屏障的使用数量 内存多重映射 ZGC使用了多重映射Multi-Mapping将多个不同的虚拟内存地址映射到同一个物理内存地址上这是一种多对一映射意味着ZGC在虚拟内存中看到的地址空间要比实际的堆内存容量来得更大。把染色指针中的标志位看作是地址的分段符那只要将这些不同的地址段都映射到同一个物理内存空间经过多重映射转换后就可以使用染色指针正常进行寻址了
ZGC收集器是如何工作的 并发标记Concurrent Mark与G1、Shenandoah一样并发标记是遍历对象图做可达性分析的阶段前后也要经过类似于G1、Shenandoah的初始标记、最终标记尽管ZGC中的名字不叫这些的短暂停顿ZGC的标记是在指针上而不是在对象上进行的标记阶段会更新染色指针中的Marked 0、Marked 1标志位并发预备重分配Concurrent Prepare for Relocate这个阶段需要根据特定的查询条件统计得出本次收集过程要清理哪些Region将这些Region组成重分配集Relocation Set。·并发重分配Concurrent Relocate重分配是ZGC执行过程中的核心阶段这个过程要把重分配集中的存活对象复制到新的Region上并为重分配集中的每个Region维护一个转发表ForwardTable记录从旧对象到新对象的转向关系。并发重映射Concurrent Remap重映射所做的就是**修正整个堆中指向重分配集中旧对象的所有引用但是ZGC中对象引用存在“自愈”功能所以这个重映射操作并不是很迫切。ZGC很巧妙地把并发重映射阶段要做的工作合并到了下一次垃圾收集循环中的并发标记阶段里去完成反正它们都是要遍历所有对象的这样合并就节省了一次遍历对象图的开销。**