Java启动参数(垃圾回收篇)
source link: https://maxqiu.com/article/detail/131
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
官方文档:
下文以 1.8.0_201
为主
常用垃圾收集器
名称 作用域 说明 启用参数
Serial 收集器
年轻代
仅适用于小型和简单的应用程序
-XX:+UseSerialGC
ParNew 收集器
年轻代
Serial 收集器的多线程版本
-XX:+UseParNewGC
Parallel Scavenge 收集器
年轻代
高吞吐量(高效率的利用 CPU)
-XX:+UseParallelGC
Serial Old 收集器 老年代 Serial 收集器的老年代版本,CMS 收集器的后备方案
CMS 收集器
老年代
最短回收停顿时间的收集器
-XX:+UseConcMarkSweepGC
Parallel Old 收集器
老年代
Parallel Scavenge 收集器的老年代版本
-XX:+UseParallelOldGC
G1 收集器
All
针对多核处理器及大内存的配置
-XX:+UseG1GC
ZGC 收集器
All
jdk 11
开始支持
参考:美团技术团队 - 新一代垃圾回收器ZGC的探索与实践
-XX:+UseZGC
-XX:+UseSerialGC
java -XX:+UseSerialGC -jar web.jar
-XX:+UseParNewGC
+ -XX:+UseConcMarkSweepGC
java -XX:+UseParNewGC -jar web.jar
如果只开启ParNew
,则JVM
会出现如下提示:Java HotSpot(TM) 64-Bit Server VM warning: Using the ParNew young collector with the Serial old collector is deprecated and will likely be removed in a future release
。说明还是老年代还是使用的Serial Old
。建议直接开启CMS
,则自动开启ParNew
,示例如下:
java -XX:+UseConcMarkSweepGC -jar web.jar
-XX:+UseParallelGC
+ -XX:+UseParallelOldGC
java -XX:+UseParallelGC -jar web.jar
java -XX:+UseParallelOldGC -jar web.jar
注:Java 8
默认使用该组合
java -jar web.jar
-XX:+UseG1GC
java -XX:+UseG1GC -jar web.jar
-XX:+UseZGC
jdk 11
仅支持Linux
,jdk 14
增加了Windows
、Mac OS
的支持。- 需要开启实验性选项:
-XX:+UnlockExperimentalVMOptions
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -jar web.jar
垃圾回收日志设置
启用参数 说明 备注
-Xloggc:filename
设置 GC
日志文件
设置后控制台将不输出
默认打印基本信息
示例:-Xloggc:gc.log
-XX:+PrintGC
开启打印 GC
基本信息
-XX:+PrintGCDetails
开启打印 GC
详细信息
推荐使用
-XX:+PrintGCTimeStamps
开启打印 GC
相对时间戳
输出示例:1.827
单位:秒
输出文件时默认开启
-XX:+PrintGCDateStamps
开启打印 GC
日期戳
输出示例:2022-03-17T21:48:00.738+0800
-XX:+PrintGCTaskTimeStamps
开启每个单独的 GC
线程打印时间戳
仅输出在控制台
-XX:+PrintGCApplicationStoppedTime
启用打印暂停持续的时间
-XX:+PrintGCApplicationConcurrentTime
启用打印自上次暂停以来经过的时间
垃圾回收线程和时间设置
启用参数 说明 备注
-XX:ConcGCThreads=threads
设置并发 GC
使用的线程数
默认值:可用的 cpu
数量
-XX:ParallelGCThreads=threads
设置用于年轻代和年老代中并行垃圾收集的线程数
默认值:可用的 cpu
数量
-XX:MaxGCPauseMillis=time
设置最大 GC
暂停时间的目标(以毫秒为单位)
这是一个软目标,JVM
将尽最大努力实现它
默认没有最大暂停时间值
PS:JVM
调优是一件很复杂的事情,需要根据业务场景、垃圾回收日志等条件慢慢分析。以下仅供参考
java -XX:+PrintCommandLineFlags -Xms128M -Xmx128M -Xmn64M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UseSerialGC -jar web.jar
低停顿时间
java -XX:+PrintCommandLineFlags -Xms1G -Xmx1G -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -jar web.jar
java -XX:+PrintCommandLineFlags -Xms1G -Xmx1G -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UseParallelGC -jar web.jar
java -XX:+PrintCommandLineFlags -Xms1G -Xmx1G -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UseG1GC -jar web.jar
java -XX:+PrintCommandLineFlags -Xms1G -Xmx1G -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -jar web.jar
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK