文章内容收录到个人网站,方便阅读 :hardyfish.top/
ZGC ,全称为Z Garbage Collector,是Java 11开始引入的一种低延迟、高吞吐的垃圾收集器,特点是:
- 停顿极短 :停顿时间通常在10ms以下 ,甚至达到亚毫秒级别。
- 并发设计:几乎所有GC操作(标记、清理、压缩)都能与应用程序并发进行,大幅减少了应用暂停时间。
- 支持超大堆内存:最高支持TB级别的堆内存,尤其适合内存较大的应用场景。
ZGC 核心特点:
-
Region-based 内存布局:
- 将堆分割成动态大小的Region,以便实现精细的内存管理。
- Region大小从几MB到数百MB不等,便于高效回收。
-
并发标记、转移和重定位:
- GC线程和应用线程几乎完全并行,应用无需等待GC动作完成。
- 大量的GC任务都发生在后台线程中。
-
着色指针技术(Colored Pointers) :
- 指针上存储了额外信息(元数据),有效地跟踪对象状态,避免了长时间的停顿。
-
NUMA架构友好:
- 在多核多CPU服务器上有更高的性能表现。
ZGC适用场景:
-
对延迟敏感的服务:
- 如实时交易系统、高频交易、游戏服务器、电商实时推荐系统等。
-
大堆内存应用:
- 适合堆大小从数十GB到数TB的大型Java应用。
-
需要实现低暂停高吞吐的业务:
- 如实时流处理、大数据分析实时服务。
如何开启ZGC?
在启动Java应用时,通过以下参数启用ZGC:
ruby
-XX:+UseZGC
设置初始和最大堆:
diff
-Xms10G -Xmx10G
示例:
ruby
java -XX:+UseZGC -Xms10G -Xmx10G -jar your-app.jar
与其他GC比较:
GC类型 | 停顿时间 | 吞吐量 | 并发能力 | 堆大小建议 |
---|---|---|---|---|
ZGC (GZero) | 极短(亚毫秒~毫秒级) | 高 | 极强 | 数GB到数TB |
G1GC | 短(10~200ms级) | 较高 | 较强 | 数GB到数百GB |
CMS | 短(百毫秒级) | 一般 | 中等 | 数GB到几十GB |
总结:
ZGC(GZero)是一款面向超低延迟场景的高性能垃圾收集器,适合追求极低延迟和稳定性能的现代化Java服务,尤其在大堆内存场景中表现突出。