JVM常见运行参数说明

1)堆栈大小相关设置

功能 参数 说明
堆栈大小设置 -Xms512m 等价于-XX:InitialHeapSize,设置JVM初始堆内存为512M
-Xmx2048m 等价于-XX:MaxHeapSize,设置JVM最大堆内存为2048M
-Xss256k 等价于 -XX:ThreadStackSize,设置Java线程堆栈大小
-Xmn 设置新生代的空间大小,一般不配置
-XX:-UseAdaptiveSizePolicy 关闭自适应的内存分配策略
方法区 JDK7 -XX:PermSize=100m
-XX:MaxPermSize=100m
JDK8 -XX:MetaspaceSize=100m
-XX:MaxMetaspaceSize=100m
比例设置 -XX:SurvivorRatio=8 设置新生代中Eden区与Survivor区的比例,默认值是8,即Eden:so:s1=8:1:1
-XX:NewRatio=2 设置新生代与老年代的比例,默认值是2

大小说明

一般将-Xms和-Xmx配置成一样的值,目的是为了能够在Java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小,从而提高性能。

默认情况下,初始堆大小:物理内存大小的1/64。最大堆大小:物理内存大小的1/4或1G。
参考官方文档:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html
在这里插入图片描述

#示例:
Xms60m -Xmx60m -Xss512k

自适应说明

在这里插入图片描述

注:
1)默认SurvivorRatio=8,但是在运行的过程中,JVM可能会动态调整,即使关闭自适应参数(-XX:-UseAdaptiveSizePolicy)也会动态调整,解决办法是显式指定-XX:SurvivorRatio=8。
2)-Xmn可以设置新生代的空间的大小与NewRatio参数冲突,如果设置了以-Xmn为准。

2)输出GC日志

功能 参数 说明
输出GC日志 -verbose:gc 打印GC简要信息
‐XX:+PrintGC 输出GC日志
‐XX:+PrintGCDetails 输出GC的详细日志
‐XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
‐XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013‐05‐04T21:53:59.234+0800)
‐XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
‐Xloggc:../logs/gc.log 日志文件的输出路径
#例如:
-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-Xmx16m
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-XX:+PrintHeapAtGC
-Xloggc:E://gc.log

3)OOM时输出Heap dump(堆转储)

功能 参数 说明
OOM时输出Heap dump(堆转储) -XX:+HeapDumpOnOutOfMemoryError OOM时输出堆dump文件
-XX:HeapDumpPath=/opt/dump.hprof 指定堆dump文件的位置
#例如:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/3.hprof

4)垃圾收集

功能 参数 说明
串行垃圾收集器 -XX:+UseSerialGC 开启这个参数,新生代和老年代都是串行,Client模式下默认
新生代ParNew垃圾收集器 ‐XX:+UseParNewGC 新生代使用ParNew回收器,老年代使用串行收集器,老年代可以搭配CMS
-XX:ParallelGCThreads=10 新生代并行线程数量
老年代CMS垃圾收集器(低延迟) -XX:+UseConcMarkSweepGC 老年代使用CMS垃圾收集器,只能与Serial和ParNew搭配,不能和Parallel搭配。JDK8下开启CMS,新生代默认使用ParNew收集器。
-XX:CMSInitiatingOccupancyFraction=-1 设置堆内存使用率的域值,达到域值便开始回收
-XX:+UseCMSCompactAtFullCollection 用于指定在执行完Full GC后对内存空间进行压缩,避免内存碎片。不过内存压缩整理过程无法并发执行,所以停顿时间变得更长。
-XX:CMSFullGCsBeforeCompaction=0 设置在执行多少次Full GC后对内存空间进行压缩整理。
-XX:ConcGCThreads=3 (早期JVM版本也叫-XX:ParallelCMSThreads)定义并发CMS过程运行时的线程数。
ParallelGC垃圾收集器(吞吐量优先) -XX:+UseParallelGC 新生代并行垃圾收集器,JDK8默认
-XX:+UseParallelOldGC 老年代并行垃圾收集器,JDK8默认,这两参数开启一个,另一个自动开启
-XX:ParallelGCThreads=10 新生代并行线程数量
-XX:MaxGCPauseMillis 设置最大的垃圾收集时的停顿时间(STW),单位为毫秒。
注意:ParallelGC为了达到设置的停顿时间,可能会调整堆大小或其他的参数,如果堆的大小设置的较小,就会导致GC工作变得很频繁,反而可能会影响到性能。该参数使用需谨慎。
-XX:GCTimeRatio 设置垃圾回收时间占程序运行时间的百分比,公式为1/(1+n)。 它的值为0~100之间的数字,默认值为99,也就是垃圾回收时间不能超过1%
-XX:+UseAdaptiveSizePolicy 自适应GC模式,垃圾回收器将自动调整年轻代、老年代等参数,达到吞吐量、堆大小、停顿时间之间的平衡。 一般用于,手动调整参数比较困难的场景,让收集器自动进行调整。
G1 -XX:+UseG1GC 使用G1垃圾收集器
-XX:MaxGCPauseMillis=200 设置期望达到的最大GC停顿时间指标(JVM会尽力实现,但不保证达到),默认值是200毫秒。
-XX:G1HeapRegionSize=1048576 设置的G1区域的大小。值是2的幂,范围是1MB到32MB之间。目标是根据最小的Java堆大小划分出约2048 个区域。默认是堆内存的1/2000。
-XX:ParallelGCThreads=10 设置STW工作线程数的值。将n的值设置为逻辑处理器的数量。n的值与逻辑处理器的数量相同,最多为8。
-XX:ConcGCThreads=3 设置并行标记的线程数。将n设置为并行垃圾回收线程数 (ParallelGCThreads) 的1/4左右。
-XX:InitiatingHeapOccupancyPercent=45 设置触发标记周期的Java堆占用率阈值。默认占用率是整个Java堆的45%。
性能参数 -XX:MaxTenuringThreshold 进入养老区的次数,默认15
-XX:+DisableExplicitGC 禁用System.gc()

5)其他参数

功能 参数 说明
编译器模式 -Xint 完全采用解释器模式执行程序
-Xcomp 完全采用即使编译器执行程序,如果即时编译出现问题,解释编译会介入执行
-Xmixed 采用解释器+即使编译器的混合模式共同执行程序
TLAB -XX:+UseTLAB 开启TLAB,默认开启
-XX:TLABWasteTargetPercent=1 TLAB默认占Eden区的1%
默认参数 -XX:+PrintFlagsInitial 查看所有参数的默认初始值
-XX:+PrintFlagsFinal 查看所有参数的最终值
其他 -XX:+DoEscapeAnalysis 逃逸分析,默认开启
-XX:+EliminateAllocations 标量替换,默认开启
-XX:CompileThreshold=10000 JIT编译方法计数器,client模式默认是1500,server模式默认是10000
-XX:+PrintCommandLineFlags 打印命令行参数(包含垃圾收集器)
# 打印命令行参数
D:\JavaEE\JavaEE_2022_0311\JVMTest\src>java -XX:+PrintCommandLineFlags com.studio.Test
-XX:InitialHeapSize=265097920
-XX:MaxHeapSize=4241566720
-XX:+PrintCommandLineFlags
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:-UseLargePagesIndividualAllocation
-XX:+UseParallelGC

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fengsheng5210/article/details/123685756
今日推荐