Java - Z 垃圾收集器 (ZGC)
什么是 ZGC?
ZGC 代表 Z Garbage Collector。Z Garbage Collector,即 ZGC,于 Java 11 中引入,作为一种低延迟的垃圾回收机制。由于开发者社区认为其过于复杂而未能在早期发布,ZGC 在 Java 11 中作为实验性功能引入。ZGC 确保垃圾回收的暂停时间不依赖于 heap 大小,无论 heap 大小是 2MB 还是 2GB,暂停时间都不会超过 10 ms。
但是,与其他 HotSpot VM GC(如 G1 和 Shenandoah)类似,ZGC 在将未使用的 heap 内存返回给操作系统方面存在限制。
Java 15 将 ZGC,即 Z Garbage Collector 提升为标准功能。在此之前,它一直是实验性功能。它是一种低延迟、高可扩展性的垃圾收集器。
ZGC 性能极高,即使在处理海量数据应用(如机器学习应用)时也能高效运行。它确保在处理数据时不会因垃圾回收而出现长时间暂停。它支持 Linux、Windows 和 macOS。
Z Garbage Collector 的特性
从 Java 16 开始,ZGC 的 Thread-Stack 处理从 Safepoints 移至 Concurrent Phase,大幅提升了效率。此后,对垃圾回收进行了以下增强,例如:
ZGC 在达到最大 heap 大小之前,默认将未提交的内存返回给操作系统。
ZGC 在减少内存占用 footprint 的同时提升性能。
ZGC 现在支持 16 TB 的 heap 大小,而之前的限制是 4TB。
Thread-stack 处理从 ZGC safepoints 中移出。
Stack 处理改为 lazy、cooperative、concurrent 和 incremental。
所有其他 per-thread root 处理从 ZGC safepoints 中移除。
HotSpot 子系统可以 lazy 处理 stacks。
Concurrent class unloading
未使用内存的 uncommiting
支持 Class Data Sharing
NUMA Awareness
Multithreaded Heap Pre-touch
最大 Heap 大小限制从 4 TB 增加到 16 TB。
使用旧式的垃圾回收方式
为了回退到 Java 11 的垃圾回收方式,可以使用以下选项:
使用 -XX:-ZUncommit 选项
将 -Xms 和 -Xmx 的 heap 大小设置为相同。