ZGC的由来与底层原理


分代ZGC的由来与底层原理

本篇文章是记录B站UP译制的分代ZGC的由来与底层原理视频而来,感谢UP!

引子

  1. 分配失速问题

GC产生的空闲内存远远小于新占用的内存,这样的问题被称为分配失速问题;

解决办法:
- 增加堆大小
- 增加GC线程数量

ZGC的基本知识

  • 内存划分

JVm中大多数对象都是朝生夕灭的状态,不会长久存在,因此在最早的时候就根据这两种状态将划分为年轻代老年代,在对新对象分配空间后,这个内存地址一开始是被分配到年轻代中,过了一段时间或者是满足一些条件之后就就会晋升到老年代中;

ZGC中堆内存的划分也按照这种方式来进行,不同的是ZGC中对于年轻代和老年代的划分在内存上不是连续的,如下所示

ZGC Heap

这种设计有助于处理内存中分配大对象,不用重复移动对象;

  • 处理阶段
  1. 并发标记阶段

主要是用于标记当前堆中存活的对象

  1. 并行重定位阶段
    主要是

GC类型

  1. Minor Collection

Minor只处理年轻代中的垃圾

标记不可达对象是通过两种方法:GC Roots和老年代记忆集,记忆集指的是老年代中指向年轻代指针的位置;

ZGC中对于空闲内存是所有的对象都可以进行使用,不会先划分老年代和年轻代再在相应的内存中获取可用地址,这意味这空闲空间对于任何一代都是可以进行使用的;

对于晋升阀值在默认是16,但是在ZGC中不在存在这个参数,一切都是程序自动调整的

分代ZGC的核心

  • 无色根
  1. 可以获得更大的堆空间(16Tb -> 64Tb)

与ZGC进行对比,在使用1/4的内存下提升4倍的吞吐量


  TOC