1.JDK16 JVM相关的改动
ZGC 并发栈处理
// todo 待一篇详细ZGC的流程场景
弹性元数据
及时的将 HotSpot 中无用的元数据(metaspace)内存还给操作系统,减少元数据的内存占用。
大概介绍一下垃圾处理器的种类与处理流程
1.G1 (Garbage-First)垃圾回收器
jdk8起才支持G1垃圾回收器,启动参数添加 -XX:+UseG1GC
G1垃圾回收器的主要流程
G1的堆内存结构,不做物理分区,仅做逻辑分区:

Eden: 默认占用堆内存的5%;可以通过-XX:G1NewSizePercent调整年轻代的占比。
Humongous: 大对象存储区,在MixedGC或Full gc的时候会回收。
大对象: 当一个对象的大小超过了一个Region区域的50%
G1垃圾回收主要分为两个阶段,年轻代回收(young-only)和空间回收阶段(space reclamation),不断交替进行。
这是一个周期性事件,达到某些要求会进行GC,所有情况都是跟着用户进程同时进行的。
年轻代回收
G1会创建回收集(collection set),记录需要被回收的内存分段的集合,年轻代回收过程的回收集包含Eden和Survivor所有内存段。
如何记录回收集以及回收流程
注:每个Region初始化时,会初始化一个remembered set(已记忆集合)简称RSet,该集合用来记录并跟踪其它Region指向该Region中对象的引用。
每个Region默认按照512Kb划分成多个Card,所以RSet需要记录的东西应该是 xx Region的 xx Card。
1.扫描根
static变量指向对象,正在执行方法调用链的局部对象。引用与RSet记录的外部引用,作为扫描入口
RSet数据,在每个Region中。
2.更新RSet
处理dirty card queue中的card,更新RSet。反应老年代对应内存分段中对象引用。
dirty card queue在每个Java线程都有,方法所使用内存标志为duty,插入到队列中;全局也有个queue共享某部分card。
3.处理RSet
识别被老年代对象指向的Eden中的对象,这些被指向的Eden中的对象被认为是存活的对象。
4.复制对象
此阶段,对象树被遍历,Eden区内存段中存活的对象会被复制到Survivor区中空的内存分段,Survivor区内存段中存活的对象如果年龄未达阈值,年龄会加1,达到阈值会被复制到Old区中空的内存分段。如果Survivor空间不够,Eden空间的部分数据会直接晋升到老年代空间。
5.处理引用
处理Soft,Weak,Phantom,Final,JNI Weak 等引用。Eden空间的数据清空,GC停止工作,而目标内存中的对象连续存储的,没有碎片,复制过程可以达到内存整理的效果。
并发标记过程
- 初始标记阶段: 标记从根节点直接可达的对象。这个阶段是STW的,并且会触发一次年轻代GC。
- 根区域扫描(Root Region Scanning): G1 GC扫描survivor区直接可达的老年代区域对象,并标记被引用的对象。这一过程必须在young GC之前完成。
- 并发标记(Concurrent Marking): 在整个堆中进行并发标记(和应用程序并发执行),此过程可能被young GC中断。在并发标记阶段,若发现区域对象中的所有对象都是垃圾,那这个区域会被立即回收。同时,并发标记过程中,会计算每个区域的对象活性(区域中存活对象的比例)。
- 再次标记(Remark): 由于应用程序持续进行,需要修正上一次的标记结果。是STW的。G1中采用了比CMS更快的初始快照法: snapshot-at-the-beginning(SATB)。
- 独占清理(cleanup,STW): 计算各个区域的存活对象和GC回收比例,并进行排序,识别可以混合回收的区域。
- 并发清理阶段: 识别并清理完全空闲的区域。
如图所示,回收的流程:
混合回收(Mixed GC)
当更多的对象晋升到老年代old region时,为了避免堆内存被耗尽,虚拟机会触发一个混合的垃圾收集器,即Mixed GC。
该算法并不是一个Old GC,除了回收整个Young Region,还会回收一部分的Old Region。
FULL GC
G1初衷是要避免Full GC发生。
上门的GC无法正常完成GC回收,G1会STW并使用单线程算法进行垃圾回收,性能很差。
以下两种会调起Full GC
- Evacuation的时候没有足够的to-space来存放晋升的对象。
- 并发处理完成之前空间耗尽。
三色算法 STAB(snapshot-at-the-beginning)
使用情况实在并发标记情况下:
//todo
2.ZGC 垃圾回收器
JDK升级对各个垃圾回收器的优化,以及性能不叫

...
...
This is copyright.