1

Java启动参数(垃圾回收篇)

 2 years ago
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

  1. java -XX:+UseSerialGC -jar web.jar

-XX:+UseParNewGC + -XX:+UseConcMarkSweepGC

  1. 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,示例如下:

  1. java -XX:+UseConcMarkSweepGC -jar web.jar

-XX:+UseParallelGC + -XX:+UseParallelOldGC

  1. java -XX:+UseParallelGC -jar web.jar
  1. java -XX:+UseParallelOldGC -jar web.jar

注:Java 8默认使用该组合

  1. java -jar web.jar

-XX:+UseG1GC

  1. java -XX:+UseG1GC -jar web.jar

-XX:+UseZGC

  • jdk 11 仅支持 Linuxjdk 14 增加了 WindowsMac OS 的支持。
  • 需要开启实验性选项:-XX:+UnlockExperimentalVMOptions
  1. 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 调优是一件很复杂的事情,需要根据业务场景、垃圾回收日志等条件慢慢分析。以下仅供参考

  1. java -XX:+PrintCommandLineFlags -Xms128M -Xmx128M -Xmn64M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UseSerialGC -jar web.jar

低停顿时间

  1. java -XX:+PrintCommandLineFlags -Xms1G -Xmx1G -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -jar web.jar
  1. java -XX:+PrintCommandLineFlags -Xms1G -Xmx1G -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UseParallelGC -jar web.jar
  1. java -XX:+PrintCommandLineFlags -Xms1G -Xmx1G -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UseG1GC -jar web.jar
  1. java -XX:+PrintCommandLineFlags -Xms1G -Xmx1G -Xmn512M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:SurvivorRatio=8 -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -jar web.jar

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK