Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类引用

Java 有用资源

Java - Z 垃圾回收器 (ZGC)



什么是 ZGC?

ZGC 代表 Z 垃圾回收器。Z 垃圾回收器 (ZGC) 在 Java 11 中作为一种低延迟垃圾回收机制引入。由于开发者社区认为它过于庞大,不适合早期发布,因此 ZGC 最初在 Java 11 中作为实验性功能引入。ZGC 确保垃圾回收暂停时间不依赖于堆大小。无论堆大小是 2MB 还是 2GB,它都不会超过 10 毫秒。

但是,与其他 HotSpot VM 垃圾回收器(例如 G1 和 Shenandoah)不同,ZGC 在将未使用的堆内存返回给操作系统方面存在局限性。

Java 15 将 ZGC(Z 垃圾回收器)作为标准功能推出。在 Java 15 之前,它是一个实验性功能。它是一个低延迟、高度可扩展的垃圾回收器。

ZGC 性能卓越,即使在海量数据应用程序(例如机器学习应用程序)中也能高效运行。它确保在由于垃圾回收而处理数据时不会出现长时间暂停。它支持 Linux、Windows 和 MacOS。

Z 垃圾回收器的特性

在 Java 16 中,ZGC 线程堆栈处理从安全点转移到并发阶段,并在很大程度上提高了效率。例如,从那时起对垃圾回收进行的增强包括:

  • ZGC 默认情况下将未提交的内存返回给操作系统,直到达到最大堆大小。

  • ZGC 可提高性能并减少内存占用。

  • ZGC 现在支持 16 TB 的堆大小,而之前的限制是 4TB。

  • 线程堆栈处理从 ZGC 安全点移除。

  • 堆栈处理变得惰性、协作、并发和增量。

  • 所有其他每个线程的根处理都从 ZGC 安全点移除。

  • HotSpot 子系统可以延迟处理堆栈。

  • 并发类卸载

  • 未用内存的释放

  • 支持类数据共享

  • NUMA 感知

  • 多线程堆预触碰

  • 最大堆大小限制从 4 TB 增加到 16 TB。

使用旧的垃圾回收方式

为了回到 Java 11 的垃圾回收方式,可以使用以下选项:

  • 使用 -XX:-ZUncommit 选项

  • 将 -Xms 和 -Xmx 堆大小设置为相同。

广告