0%

JVM参数

JVM参数

-X参数选项 非标准选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 使用java -X可以看到-X参数选项有哪些参数
java -X
-Xmixed 混合模式执行(默认)
-Xint 仅解释模式执行
-Xbootclasspath:<用 : 分隔的目录和 zip/jar 文件>
设置引导类和资源的搜索路径
-Xbootclasspath/a:<用 : 分隔的目录和 zip/jar 文件>
附加在引导类路径末尾
-Xbootclasspath/p:<用 : 分隔的目录和 zip/jar 文件>
置于引导类路径之前
-Xdiag 显示附加诊断消息
-Xnoclassgc 禁用类垃圾收集
-Xincgc 启用增量垃圾收集
-Xloggc:<file> 将 GC 状态记录在文件中(带时间戳)
-Xbatch 禁用后台编译
-Xms<size> 设置初始 Java 堆大小,等价于-XX:InitialHeapSize
-Xmx<size> 设置最大 Java 堆大小,等价于-XX:MaxHeapSize
-Xss<size> 设置 Java 线程堆栈大小,等价于-XX:ThreadStackSize
-Xprof 输出 cpu 分析数据
-Xfuture 启用最严格的检查,预计会成为将来的默认值
-Xrs 减少 Java/VM 对操作系统信号的使用(请参阅文档)
-Xcheck:jni 对 JNI 函数执行其他检查
-Xshare:off 不尝试使用共享类数据
-Xshare:auto 在可能的情况下使用共享类数据(默认)
-Xshare:on 要求使用共享类数据,否则将失败。
-XshowSettings 显示所有设置并继续
-XshowSettings:system
(仅限 Linux)显示系统或容器
配置并继续
-XshowSettings:all
显示所有设置并继续
-XshowSettings:vm 显示所有与 vm 相关的设置并继续
-XshowSettings:properties
显示所有属性设置并继续
-XshowSettings:locale
显示所有与区域设置相关的设置并继续

-X 选项是非标准选项。如有更改,恕不另行通知。


以下选项为 Mac OS X 特定的选项:
-XstartOnFirstThread
在第一个 (AppKit) 线程上运行 main() 方法
-Xdock:name=<应用程序名称>"
覆盖停靠栏中显示的默认应用程序名称
-Xdock:icon=<图标文件的路径>
覆盖停靠栏中显示的默认图标

-XX参数选项 非标准化

有两种类型,分为Boolean类型和KV类型

  • Boolean类型 -XX:+<option> 启用 -XX:-<option> 禁用
  • KV类型 -XX:<option>=<value>

常用JVM参数选项

打印设置的XX选项及值

  • -XX:+PrintCommandLineFlags 在程序运行前打印出用户手动设置或者JVM自动设置的XX选项
  • -XX:+PrintFlagsInitial 表示打印出所有XX选项的默认值
  • -XX:+PrintFlagsFinal 表示打印出XX选项在运行程序时生效的值
  • -XX:+PrintVMOptions 打印JVM参数

堆、栈、方法区的内存大小设置

堆设置
  • Xms512m JVM初始堆内存,等价于-XX:InitialHeapSize
  • Xmx512m JVM最大堆内存,等价于-XX:MaxHeapSize
  • -Xmn256m 年轻代大小(推荐为堆大小的3/8),初始值和最大值都是该值,等价于-XX:NewSize=256m-XX:MaxNewSize=256m
  • -XX:NewSize=128m 年轻代初始值
  • -XX:MaxNewSize=128m 年轻代最大值
  • -XX:SurvivorRatio=8 年轻代中Eden区与一个Survivor区的比值,默认8,由于-XX:+UseAdaptiveSizePolicy 是默认打开的,所以需要显式设置才会生效,一般不需要设置
  • -XX:+UseAdaptiveSizePolicy 自动选择各区的大小比例,默认开启
  • -XX:NewRatio=2 老年代与年轻代的比值,默认2
  • -XX:PretenureSizeThreadshold=1024 让大于此阈值的对象直接分配在老年代,单位为字节,只对Serial/ParNew收集器有效
  • -XX:MaxTenuringThreshold=15 新生代每次MinorGC后,还存活的对象年龄+1,当对象的年龄大于该值时则进入老年代,默认15
  • -XX:+PrintTenuringDistribution 使JVM每次MinorGC后打印出当前使用的Survivor中对象的年龄分布
  • -XX:TargetSurvivorRatio MinorGC结束后Survivor区域中占用空间的期望比例
栈设置
  • -Xss128k 每个线程的栈大小,等价于-XX:ThreadStackSize
方法区

jdk8之前使用永久代,jdk8使用元空间

永久代
  • -XX:PermSize=256m 永久代初始值
  • -XX:MaxPermSize=256m 永久代最大值
元空间
  • -XX:MetaspaceSize 初始空间大小
  • -XX:MaxMetaspaceSize 最大空间,默认没有限制
  • -XX:+UseCompressedOops 压缩对象指针
  • -XX:+UseCompressedClassPointers 压缩类指针
  • -XX:CompressedClassSpaceSize 设置Klass Metaspace大小,默认1G
直接内存
  • -XX:MaxDirectMemorySize 指定DirectMemory容量,若未指定,则默认与java堆最大值一致

OOM相关选项

  • -XX:+HeapDumpOnOutOfMemoryError 在内存出现OOM的时候,把Heap转存Dump到文件中
  • -XX:+HeapDumpBeforeFullGC 在出现FullGC之前,生成Heap转储文件
  • -XX:HeapDumpPath heap转储文件存储路径
  • -XX:OnOutOfMemoryError 指定一个可执行文件路径,当发生OOM时,执行该脚本

垃圾收集器相关选项

Serial收集器

在client模式下新生代使用Serial收集器,老年代使用Serial Old收集器

  • -XX:UseSerialGC 使用Serial收集器
ParNew收集器
  • -XX:+UseParNewGC 新生代使用ParNew收集器
  • -XX:ParallelGCThreads 限制线程数量,默认是开启和CPU数据相同的线程数
Parallel收集器
  • -XX:+UseParallelGC 指定新生代使用Parallel收集器,此时老年代会自动指定为Parallel Old收集器,jdk8默认开启
  • -XX:+UseParallelOldGC 指定老年代使用Parallel Old收集器,此时新生代会自动指定为Parallel收集器
  • -XX:ParallelGCThreads 年轻代并行收集器的线程数,CPU数量小于8时默认是开启和CPU数据相同的线程数,当CPU数量大于8时,ParallelGCThreads的值等于3+(5*CPU)/8
  • -XX:MaxGCPauseMillis 设置垃圾回收器最大停顿时间(STW时间),单位毫秒,谨慎配置
  • -XX:GCTimeRatio 垃圾收集时间占总时间的比例(= 1/(N+1)),取值范围(0,100),默认99
  • -XX:+UseAdaptiveSizePolicy 自适应调节策略
CMS收集器
  • -XX:+UseConcMarkSweepGC 指定使用CMS收集器,开启时-XX:+UseParNewGC也会自动开启,新生代使用ParNew,老年代使用CMS+Serial Old组合
  • -XX:CMSInitialtingOccupanyFraction 堆内存的阈值,一旦达到该阈值,开始回收,默认92%,通过该选项可以有效降低Full GC的次数
  • -XX:+UseCMSCompactAtFullCollection 在执行完Full GC后对内存空间进行压缩整理,避免内存碎片的产生,不过会导致STW时间变长
  • -XX:CMSFullGCsBeforeCompaction 执行多少次Full GC后对内存空间进行整理
  • -XX:PapallelCMSThreads CMS的线程数量,默认是(PapallelCMSThreads+3)/4
G1收集器
  • -XX:+UseG1GC 使用G1收集器
  • -XX:G1HeapRegionSize 设置每个Region的大小,值是2的幂,范围1M到32M之间,默认是堆内存的1/2000
  • -XX:MaxGCPauseMills 最大GC停顿时间指标,默认200ms
  • -XX:ParallelGCThread STW时GC线程数的值,默认为8
  • -XX:ConcGCThreads 并发标记的线程数,推荐设置为ParallelGCThread的1/4左右
  • -XX:InitiatingHeapOccupancyParcent 触发并发GC周期的java堆占用率阈值,超过则触发GC,默认45
  • -XX:G1NewSizePercent 新生代占用整个堆内存的最小百分比,默认5%
  • -XX:G1MaxNewSizePercent 新生代占用整个堆内存的最大百分比,默认60%
  • -XX:G1ReservePercent 保留内存区域,防止Survivor的to区溢出

GC日志相关选项

  • -verbose:gc 输出gc日志信息
  • -XX:+PrintGC 打印简化的GC日志,等价于-verbose:gc
  • -XX:+PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存区域分配情况
  • -XX:+PrintGCTimeStamps 输出GC发生时的时间戳,需要与-XX:+PrintGCDetails搭配使用
  • -XX:+PrintGCDateStamps 输出GC发生时的时间戳,日期格式,需要与-XX:+PrintGCDetails搭配使用
  • -XX:+PrintHeapAtGC 每一次GC前后都打印堆信息
  • -Xloggc:<file> 把GC日志写入到一个文件中

其他

  • -XX:+DisableExplicitGC 禁止hotspot执行System.gc()
  • -XX:ReservedCodeCacheSize=<n>[g|m|k] 指定代码缓存的大小
  • -XX:InitialCodeCacheSize=<n>[g|m|k] 指定代码缓存的大小
  • -XX:+UseCodeCacheFlushing 让jvm放弃一些被编译的代码,避免代码缓存被占满时JVM切换到interpreted-only的情况
  • -XX:+DoEscapeAnalysis 开启逃逸分析
  • -XX:+UseBiasedLocking 开启偏向锁
  • -XX:+UseLargePages 开启使用大页面
  • -XX:+UseTLAB 使用TLAB,默认打开
  • -XX:+PrintTLAB 打印TLAB的使用情况
  • -XX:TLABSize 设置TLAB大小