Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 11 新垃圾回收器 ZGC

Java 11 新垃圾回收器 ZGC

作者头像
WindWant
发布于 2020-09-11 07:06:41
发布于 2020-09-11 07:06:41
1.6K0
举报
文章被收录于专栏:后端码事后端码事

可伸缩、低延迟的垃圾回收器

GC 暂停时间不超过 10ms

堆管理容量范围(小M级别,大到T级别)

对应用吞吐量影响不超过15%(对比 G1)

为进一步的添加新特性和优化做基础

默认支持 Linux/x64 系统

一、 启用Linux Large Pages

ZGC 启用Large Pages 是一种对应用高性能的折中(吞吐量、低延迟及启动时间),但是却不会带来明显的弊端。除了在应用启动上需要稍微复杂的配置,所需要的系统相关root权限需要手动进行配置。

Linux Large 在x86 linux平台也称为 huge pages,页大小为2M。

假设需要16G大小的JAVA 堆,则意味着需要 16G / 2M = 8192 huge pages。

首先需要分配至少16G(8192 huge pages)内存到 huge pages 内存池。 之所以说至少,是因为如果 JVM 启用了的 huge pages,那么不仅仅是GC,同时也包括JVM 的其它功能部分也会用到这部分内存(code heap, marking bitmaps 等),因此在此我们分配 9216 pages (18G),保持有2G的额外内存供非堆分配使用。

1. 配置系统的 huge pages 内存池:

$ echo 9216 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

附注:系统在没有足够内存的情境下会导致这一命令执行失败;命令执行完成需要一定的时间,可以通过以下命令进行查看:

$ cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

9216

2. 挂载 hugetlbfs 文件系统,并分配JVM运行用户权限:

$ mkdir /hugepages

$ mount -t hugetlbfs -o uid=123 nodev /hugepages

附注:对于内核大于等于4.4的linux系统,可以跳过此步骤。

3. JVM启动命令添加 -XX:+UseLargePages 配置:

$ java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xms16G -Xmx16G -XX:+UseLargePages ...

4. 如果挂载了多个 hugetlbfs 文件系统,则需要通过 -XX:ZPath 命令指定需要使用的 hugetlbfs 系统:

$ java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xms16G -Xmx16G -XX:+UseLargePages -XX:ZPath=/hugepages ...

附注:huge pages 内存池分配及 hugetlbfs 文件系统挂载是非持久化的,会因系统重启而丢失,因此需要用户一定的措施来处理此种情景。

二、启用 Transparent Huge Pages

... ...

三、启用 NUMA

ZGC默认支持 NUMA,会优先在NUMA-local 内存进行 JAVA 堆内存分配,但是在有CPU亲和性设置的情况下,JVM会自动禁用NUMA,如果需要显示的设置NUMA支持,可以通过配置以下选项:-XX:+UseNUMA or -XX:-UseNUMA。

对于运行在 NUMA 机器的 JVM ,启用NUMA,能够在性能上的到显著的提升。

四、启用 GC 日志

启用命令:

-Xlog:<tag set>,[<tag set>, ...]:<log file>

帮助信息:

-Xlog:help

基本日志:

-Xlog:gc:gc.log

性能调试:

-Xlog:gc*:gc.log

gc* 代表所有有gc标志的日志。:gc.logd代表日志写入gc.log文件。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java垃圾回收器(GC):什么是垃圾回收?如何选择 G1、ZGC 与 Shenandoah?
本文将通过丰富的代码示例深入讲解垃圾回收(Garbage Collection)的核心概念,比较 G1、ZGC 与 Shenandoah 的特性,提供调优技巧,助你选择最适合的 GC。
猫头虎
2024/12/24
6690
JDK之ZGC介绍
ZGC是最近由Oracle为OpenJDK开源的新垃圾收集器。它主要由Per Liden编写。ZGC类似于Shenandoah或Azul的C4,专注于减少暂停时间的同时仍然压缩堆 。
张哥编程
2024/12/19
1350
垃圾回收器优化:JDK 17 与 JDK 21 如何调整 GC 算法以提升应用性能?
本文将从 JDK 17 与 JDK 21 的垃圾回收改进出发,结合代码示例解析优化方案,并提供实际项目中的调优策略,帮助你提升应用性能。
猫头虎
2024/12/24
6850
ZGC初体验——新一代低延迟收集器
可能有人不知道ZGC是什么,他是新一代实验性质的垃圾收集器,我们知道GC的评价标准有三个:内存占用、吞吐量、延迟,没有哪个收集器能三者兼备,只能根据场景选择合适的收集器,而ZGC最大的特点就是超低的延迟,引用官方的说法,无论你的堆有多大,几百G还是几个T,都能在10ms以内完成垃圾回收,远远超越了G1、cms(延迟方面),代价是吞吐量的下降(约10%)和额外的内存占用。
崩天的勾玉
2021/12/20
1.4K0
ZGC初体验——新一代低延迟收集器
一颗米-ZGC可伸缩低延迟垃圾收集器深度解析
随着Java应用的日益复杂和数据量的不断增长,垃圾收集(GC)的性能和效率变得尤为关键。ZGC(Z Garbage Collector)是Java 11中引入的一款可伸缩、低延迟的垃圾收集器,它旨在满足大规模堆内存和高吞吐量应用的需求。本文将详细探讨ZGC的工作原理、特性、性能优势以及实际使用中的代码示例,帮助读者更好地理解和应用这一革命性的垃圾收集技术。
灬沙师弟
2024/04/10
3330
一颗米-ZGC可伸缩低延迟垃圾收集器深度解析
Java 垃圾收集器详解:CMS, G1, ZGC
Java 虚拟机(JVM)内置的垃圾收集机制是 Java 程序能够自动管理内存的关键。随着 Java 应用程序规模的增长和技术的进步,垃圾收集器的设计也在不断演进,以满足更高性能、更低延迟的需求。本文将详细介绍 CMS、G1 和 ZGC 这三种垃圾收集器,并提供一个详细的对比表格。
井九
2024/10/12
3330
Java 垃圾收集器详解:CMS, G1, ZGC
JVM 垃圾收集器-Java快速进阶教程
在本快速教程中,我们将演示不同JVM 垃圾回收 (GC) 实现的基础知识。然后,我们将学习如何在应用程序中启用特定类型的垃圾回收。
jack.yang
2025/04/05
1100
JVM 从入门到放弃之 ZGC 垃圾收集器
Z Garbage Collector,也称为ZGC,在 jdk 11 中引入的一种可扩展的低延迟垃圾收集器,在 jdk 15 中发布稳定版。在旨在满足以下目标:
没有故事的陈师傅
2022/05/23
9190
JVM 从入门到放弃之 ZGC 垃圾收集器
14. ZGC垃圾收集器
这个可以在官方文档(https://wiki.openjdk.java.net/display/zgc/Main)上看到,目前jdk11目前只支持linux。
用户7798898
2021/11/10
5720
深入解析java虚拟机:垃圾回收,ShenandoahGC及并发垃圾 回收器
在Shenandoah GC之前的所有垃圾回收器都必须主动或者被动地整理老年代或者新生代,因此会导致长时间的STW,对于大型的堆,比如超过100GB,所有现存的垃圾回收器几乎都表现得很差。为了解决这些问题,Red Hat开发了一个低停顿的并发垃圾回收器,并于JEP 189贡献给了OpenJDK社区,目前Shenandoah GC仍然属于实验性特性,需要使用参数-XX:+ UnlockExperimentalVMOptions -XX:+UseShenandoahGC开启。
愿天堂没有BUG
2022/10/31
8260
深入解析java虚拟机:垃圾回收,ShenandoahGC及并发垃圾 回收器
JVM真香系列:图解垃圾回收器
并发收集:指用户线程与垃圾收集线程同时工作(不一定是并行的可能会交替执行)。用户程序在继续运行,而垃圾收集程序运行在另一个CPU上。
田维常
2020/11/19
4070
JVM真香系列:图解垃圾回收器
新一代垃圾回收器ZGC的探索与实践
很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰,作为新一代的低延迟垃圾回收器,ZGC在大内存低延迟服务的内存管理和回收方面,有着非常不错的表现。
美团技术团队
2020/08/11
1.3K0
JVM 11 的调优指南:如何进行JVM调优,JVM调优参数
JVM 11的优化指南:如何进行JVM调优,以及JVM调优参数有哪些”这篇文章将包含JVM 11调优的核心概念、重要性、调优参数,并提供12个实用的代码示例,每个示例都会结合JVM调优参数和Java代码
搜云库技术团队
2024/01/17
1.7K0
JVM 11 的调优指南:如何进行JVM调优,JVM调优参数
Java ZGC 深度剖析及其在构建低延迟流系统中的实践心得
在 Java 应用程序中,垃圾回收(Garbage Collection,以下简称 GC)是一个不可避免的过程,它负责释放不再使用的内存空间以避免内存泄漏。然而,GC 操作通常会导致短暂的停顿时间(Stop the World,以下简称 STW),这对于对延迟敏感的应用程序来说是一个严重的问题——STW 会导致应用程序暂停响应,从而影响用户体验和系统性能。为了解决这个问题,Java 引入了 Z Garbage Collector(以下简称 ZGC),它是一种低延迟垃圾回收器,旨在减少 GC 引起的停顿时间。ZGC 通过使用并发和分区收集技术,大大减少了 STW 的时间和频率,使得应用程序可以在 GC 期间继续运行,从而提供更加平滑和一致的性能。AutoMQ 基于 ZGC 进行了一系列调优,以获得更低的延迟。在本文中,我们将详细介绍 ZGC 的工作原理,以及如何通过调整和优化 ZGC 的配置来实现更低的延迟,从而提高 Java 应用程序的性能和响应能力。
用户10807116
2024/07/09
3940
Java 14 Hotspot 虚拟机垃圾回收调优指南!
出处:www.cnblogs.com/sxpujs/p/12638114.html
Java技术栈
2020/06/16
6100
Java  14 Hotspot 虚拟机垃圾回收调优指南!
Java JVM调优秘籍:让垃圾回收不再是“垃圾”!
在Java的世界里,JVM(Java虚拟机)是每个开发者的幕后英雄。它不仅负责运行Java程序,还默默地处理内存管理、垃圾回收等核心任务。但是,你知道吗?通过精心调优JVM,我们可以让它的性能发挥到极致,让应用程序运行得更加流畅和高效。本文将带你深入了解JVM调优的奥秘,让你的Java应用飞起来!
疯狂的KK
2024/03/11
5490
Java JVM调优秘籍:让垃圾回收不再是“垃圾”!
Linux 透明大页 THP 和标准大页 HP
在 Linux 中大页分为两种: Huge pages (标准大页) 和 Transparent Huge pages(透明大页)。
JiekeXu之路
2022/05/17
3.4K0
Linux 透明大页 THP 和标准大页 HP
JVM之垃圾回收器
有了虚拟机,就一定需要收集垃圾的机制,这就是Garbage Collection,对应的产品我们称为Garbage Collector。
Java微观世界
2025/01/20
1830
JVM之垃圾回收器
一个超乎想象的垃圾收集器:ZGC
Z Garbage Collector,即ZGC,是一个可伸缩的、低延迟的垃圾收集器,主要为了满足如下目标进行设计:
程序猿DD
2019/05/10
1.4K0
一个超乎想象的垃圾收集器:ZGC
JVM | 垃圾回收器(GC)- Java内存管理的守护者
在编程世界中,有效的内存管理是至关重要的。这不仅确保了应用程序的稳定运行,还可以大大提高性能和响应速度。作为世界上最受欢迎的编程语言之一,通过Java虚拟机内部的垃圾回收器组件来自动管理内存,是成为之一的其中一项必不可少的技术点。
kfaino
2023/12/04
7330
JVM | 垃圾回收器(GC)- Java内存管理的守护者
相关推荐
Java垃圾回收器(GC):什么是垃圾回收?如何选择 G1、ZGC 与 Shenandoah?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档