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

JVM垃圾回收器GC的常用参数

作者头像
斯武丶风晴
发布于 2020-05-04 06:34:23
发布于 2020-05-04 06:34:23
2.5K00
代码可运行
举报
文章被收录于专栏:龙首琴剑庐龙首琴剑庐
运行总次数:0
代码可运行

GC 常用参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 年轻代 最小堆 最大堆 栈空间
-Xmn -Xms -Xmx -Xss
# System.gc()不管用 ,避免因System.gc()调用导致的FGC,生产环境建议
-XX:+DisableExplictGC 
# 年轻代存活对象升代年龄,最大值15CMS 默认是6, Parallel, G1 默认15-XX:MaxTenuringThreshold
  • GC 日志参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 生产环境一般再额外增加GC日志参数,OOME HeapDump 参数
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dir/
-Xloggc:/path/to/log/dir/gc-%t.log  -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause
  • 其他参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## TLAB的参数,一般不需要调整
# 使用TLAB,默认打开
-XX:+UseTLAB
# 打印TLAB的使用情况
-XX:+PrintTLAB
# 设置TLAB大小  
-XX:TLABSize

# 打印类加载详细过程
-verbose:class
# 打印 VM 参数
-XX:+PrintVMOptions
# 打印最终参数值
-XX:+PrintFlagsFinal 
# 打印默认参数值
-XX:+PrintFlagsInitial

#  以下不建议生产环境设置
# 锁自旋次数 
-XX:PreBlockSpin 
# 热点代码检测参数
-XX:CompileThreshold

Parallel常用参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 新生代 ParallelScavenge + 老年代 ParallelOld  (JDK7,  JDK8 为默认垃圾回收器) 
-XX:+UseParallelGC
# 新生代 ParallelScavenge + 老年代 ParallelOld, 同上 
-XX:+UseParallelOldGC

# 并行收集器的线程数,同样适用于CMS G1,默认CPU所支持的线程数,如果CPU所支持的线程数大于8,则 默认 8 + (logical_processor -8)*(5/8)
-XX:+ParallelGCThreads
# 大对象到底多大 (仅适用于 DefNew / ParNew ) https://bugs.openjdk.java.net/browse/JDK-8050209
-XX:PreTenureSizeThreshold
# 年轻代Survivor区比率,默认是8 (表示 Eden : From : To 为 811-XX:SurvivorRatio

# 自动选择各区大小比例
-XX:+UseAdaptiveSizePolicy

CMS 常用参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 新生代 ParNew + 老年代 CMS + 老年代 Serial Old
# 某些版本的参数是这样的: -XX:+UseConcurrentMarkSweepGC
-XX:+UseConcMarkSweepGC

# 响应时间优先,停顿时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代,默认 18446744073709551615  
-XX:MaxGCPauseMillis
# 吞吐量优先,设置JVM吞吐量要达到的目标值, GC时间占用程序运行时间的百分比的差值,默认是 99
# 也就应用程序线程应该运行至少99%的总执行时间,GC1%
-XX:GCTimeRatio=99

# 并行收集器(ParNew , STW,  YGC)的线程数,默认CPU所支持的线程数,如果CPU所支持的线程数大于8,则 默认 8 + (logical_processor -8)*(5/8)
-XX:+ParallelGCThreads
#  CMS垃圾回收线程数量
-XX:ParallelCMSThreads

# 解决 CMS `Memory Fragmentation` 碎片化, 开启FGC时进行压缩,以及多少次FGC之后进行压缩
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=3
# 解决 CMS `Concurrent mode failure``Promotion Failed`晋升失败  
# 使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发生SerialOld卡顿,应该调小,(频繁CMS回收)
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70

# 开启 CMS 元空间的垃圾回收
-XX:+CMSClassUnloadingEnabled
# -XX:CMSInitiatingPermOccupancyFraction  (JDK8已经移除)

G1 常用参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  JDK 9开始为默认垃圾回收器
-XX:+UseG1GC

# 响应时间优先,建议值,设置最大GC停顿时间(GC pause time)指标(target). 这是一个软性指标(soft goal)
#  JVM 会尽力去达成这个目标. 所以有时候这个目标并不能达成
# G1会尝试调整Young区的块数来达到这个值
-XX:MaxGCPauseMillis
# 响应时间优先,GC的停顿间隔时间,默认0
-XX:GCPauseIntervalMillis
# 吞吐量优先,设置JVM吞吐量要达到的目标值, GC时间占用程序运行时间的百分比的差值,默认是 99
# 也就应用程序线程应该运行至少99%的总执行时间,GC1%
-XX:GCTimeRatio=99

# 并发回收器(STW   YGC)的工作线程数量,默认CPU所支持的线程数,如果CPU所支持的线程数大于8,则 默认 8 + (logical_processor -8)*(5/8)
-XX:ParallelGCThreads
# G1 并发标记线程数量
-XX:ConcGCThreads

# 启动并发GC时的堆内存占用百分比. G1用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比例。默认45%
# 当堆存活对象占用堆的45%,就会启动G1 中Mixed GC
-XX:InitiatingHeapOccupancyPercent
# G1 分区大小,建议逐渐增大该值,1 2 4 8 16 32。
# 随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长。ZGC做了改进(动态区块大小)
-XX:G1HeapRegionSize

# 新生代最小比例,默认为5%
# -XX:G1NewSizePercent (JDK8u23已经移除 https://www.oracle.com/technical-resources/articles/java/g1gc.html)
# 新生代最大比例,默认为60%
# -XX:G1MaxNewSizePercent (JDK823已经移除 https://www.oracle.com/technical-resources/articles/java/g1gc.html)
# G1 新生代初始大小,默认为5%
-XX:NewSize
# G1 新生代最大大小
-XX:MaxNewSize

by Sven Augustus https://my.oschina.net/langxSpirit

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JVM常见垃圾回收器组合参数设定(JDK6 To JDK14)
小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
斯武丶风晴
2020/04/24
1.1K0
JVM常见垃圾回收器组合参数设定(JDK6 To JDK14)
JVM GC回收器
-XX:+UseParNewGC :新生代使用ParNew回收器,老年代使用串行回收器
BUG弄潮儿
2020/08/24
2990
JVM GC回收器
一张图看懂JVM之垃圾回收器详解
导读 感谢读者的反馈,在?图中更新了新生代Eden区以及两个Survivor区的默认空间占比的分配表示,这里按照10等份区分8/10、1/10、1/10分别表示8:1:1的关系,会更清晰点。新生代所
用户5927304
2019/07/31
7960
说一说JVM的垃圾回收器
串行:指的是垃圾回收器与用户线程交替进行,这意味着在垃圾回收器执行的时候用户线程需要暂停工作 并行:指的是垃圾回收器和用户线程同时执行,除了cms和G1之外其它垃圾回收器都是以串行的方式执行的
小尘要自信
2023/10/10
1980
说一说JVM的垃圾回收器
Hotspot JVM垃圾回收器
  前两篇《JVM入门——运行时数据区》《JVM常见垃圾回收算法》所提到的实际上JVM规范以及常用的垃圾回收算法,具体的JVM实现实际上不止一种,有JRockit、J9等待,当然最有名当属HotSpo
用户1148394
2018/01/12
8760
Hotspot JVM垃圾回收器
垃圾回收器介绍
<p align=center><img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/073a0b4f20c4479c8ddbb17947e90bd3~tplv-k3u1fbpfcp-watermark.image?" alt="图片.png" /></p>
泽霖
2023/11/14
2060
jvm之7种垃圾回收器解读(上)
Serial收集器是最基本、历史最悠久的垃圾收集器了。JDK1.3之前回收新生代唯一的选择。
一个风轻云淡
2023/10/15
2440
jvm之7种垃圾回收器解读(上)
JVM垃圾回收器原理及使用介绍
Java语音的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。
海仔
2019/08/06
4410
JVM垃圾回收算法以及垃圾回收器机制
JVM中,程序计数器、虚拟机栈、本地方法栈都是都是线程私有的,随线程而生随线程而灭,栈帧(栈中的对象)随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理。
Java技术债务
2022/08/09
6260
JVM垃圾回收算法以及垃圾回收器机制
JVM系列第9讲:JVM垃圾回收器
前面文章中,我们介绍了 Java 虚拟机的内存结构,Java 虚拟机的垃圾回收机制,那么这篇文章我们说说具体执行垃圾回收的垃圾回收器。
陈树义
2018/12/14
4580
JVM系列第9讲:JVM垃圾回收器
面试:JVM 垃圾回收器
我们都知道java的默认垃圾回收器是jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代),但是一般我们都不会使用,但是在 jdk1.9 默认垃圾收集器G1
Tim在路上
2020/08/04
3.5K0
JVM之垃圾回收器
有了虚拟机,就一定需要收集垃圾的机制,这就是Garbage Collection,对应的产品我们称为Garbage Collector。
Java微观世界
2025/01/20
1860
JVM之垃圾回收器
JVM - 垃圾回收器概述
[GC (Allocation Failure) [DefNew: 67932K->0K(78720K), 0.0002327 secs] 68792K->859K(253504K), 0.0002491 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 老年代串行收集器
崔笑颜
2020/12/29
4300
JVM(五)垃圾回收器的前世今生
如果垃圾回收的算法属于内存回收的方法论的话,那本文讨论的垃圾回收器就属于内存回收的具体实现。
磊哥
2019/02/20
7610
JVM(五)垃圾回收器的前世今生
Java 常见的垃圾回收器
垃圾回收器 (GC, Garbage Collector)是和具体的 JVM 实现紧密相关。
王小明_HIT
2020/06/23
5160
垃圾回收器 Krains 2020-08-07
高吞吐量较好因为这会让应用程序的最终用户感觉只有应用程序线程在做“生产性”工作。直觉上,吞吐量越高程序运行越快。
Krains
2020/08/10
4590
Jvm垃圾回收器(终结篇)
第一篇《Jvm垃圾回收器(基础篇)》主要讲述了判断对象的生死?两种基础判断对象生死的算法、引用计数法、可达性分析算法,方法区的回收。在第二篇《Jvm垃圾回收器(算法篇)》中主要介绍了垃圾回收的几种常用算法:标记-清除、复制算法、标记-整理算法、分代收集算法。那么接下来我们重点研究Jvm的垃圾收集器(serial收集器、parnew收集器、parallel scavenge收集器、serial  old 收集器、parallel old收集器、cms收集器、g1收集器)。前面说了那么多就是为它做铺垫的。
爱撸猫的杰
2019/03/28
5420
Jvm垃圾回收器(终结篇)
JVM-垃圾回收器概述
Serial收集器是最基本、历史最悠久的垃圾收集器了。JDK1.3之前回收新生代唯一的选择。
才疏学浅的木子
2023/10/17
2570
JVM-垃圾回收器概述
7种jvm垃圾回收器,这次全部搞懂
之前我们讲解了jvm的组成结构与垃圾回收算法等知识点,今天我们来讲讲jvm最重要的堆内存是如何使用垃圾回收器进行垃圾回收,并且如何使用命令去配置使用这些垃圾回收器。
公众号 IT老哥
2020/09/16
2.7K0
7种jvm垃圾回收器,这次全部搞懂
JVM垃圾回收器
https://blog.csdn.net/tjiyu/article/details/53983650 使用场景
丁D
2022/08/12
2930
JVM垃圾回收器
相关推荐
JVM常见垃圾回收器组合参数设定(JDK6 To JDK14)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验