JVM常用运行时参数说明
前言
仅列出常用JVM调优参数,更多请转文末的官方文档链接。
堆内存
-Xmx
,设置最大堆内存,默认为物理内存的1/4。示例:-Xmx4096m
,设置为4G-Xms
,设置初始内存,默认为物理内存的1/64。此值可以和-Xmx
相同,避免每次gc后JVM重新分配内存。-Xmn
,设置年轻代堆内存,Sun官方推荐配置年轻代大小为整个堆的3/8。示例:-Xmn1536m
-XX:SurvivorRatio
,设置年轻代中Eden和Survivor区的比值,默认为8。示例:-XX:SurvivorRatio=8
,Survivor区和Eden区的比值为8,survivor区占年轻代的1/9-XX:NewRatio
,设置老年代和年轻代的比值,默认为2。Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。示例:-XX:NewRatio=4
,年轻代和年老代的比值为4,年轻代占整个堆的1/5。-XX:MaxTenuringThreshold
,设置垃圾最大年龄。最大值为15。对于并行收集器默认值为15,对于CMS收集器默认值为6。年龄较低时更容易从年轻代到年老代,对于年老代型应用能提高效率;较高时会增加对象在年轻代的存活时间,增加在年轻代就被回收的概率。
非堆内存
-XX:MetaspaceSize
,设置元空间初始值。示例:-XX:MetaspaceSize=512M
-XX:MaxMetaspaceSize
,设置元空间最大值。示例:-XX:MaxMetaspaceSize=512M
线程栈内存
-Xss
,设置线程栈内存,JDK5.0之前是256K,JDK5.0后每个线程大小为1M。线程栈内存大小会限制线程的数量,更小的线程栈会有更多的线程数。线程栈内存过大或者过小都会导致内存溢出。一般小的应用, 如果栈不是很深, 应该是128k够用的大的应用建议使用256k。示例:-Xss128k
GC收集器
-XX:+UseSerialGC
,设置串行收集器。适用场景:内存小于100M;单核、单机程序,并且没有停顿时间的要求-XX:+UseConcMarkSweepGC
,设置并发收集器,开启该参数后会自动将-XX:+UseParNewGC
打开。即:ParNew(Young区)+ CMS(Old区)的组合。适用场景:多CPU、追求低停顿时间、快速响应-XX:+UseParallelGC
,设置并行收集器。JVM默认的收集器。适用场景:多CPU、高吞吐量、允许停顿时间超过1秒-XX:+UseG1GC
,设置G1收集器,适合多核大内存机器(至少6G堆内存),致力于解决串行收集器、并发收集器和CMS收集器的缺陷,官方推荐,性能高。
没有万能的收集器,只有适合的收集器。
辅助参数
-verbose:class
,显示每个load classes
的信息-verbose:gc
,显示每次gc的简要信息。约等于-XX:+PrintGC
-XX:+PrintGCDetails
,打印每次gc的详细信息。-XX:+PrintGCTimeStamps
,打印程序启动到GC发生的时间,搭配-XX:+PrintGCDetails
使用-XX:+PrintGCDateStamps
,打印GC发生时的时间戳,搭配-XX:+PrintGCDetails
使用-XX:+PrintHeapAtGC
,打印GC前后的堆信息-XX:+PrintGCApplicationStoppedTime
,打印GC时线程的停顿时间-XX:+PrintTenuringDistribution
,打印JVM在每次MinorGC后当前使用的Survivor中对象的年龄分布-Xloggc
,指定gc日志文件的路径,适用该参数会自动激活-verbose:gc
。示例:-Xloggc:/home/logs/gc.log
-XX:+HeapDumpOnOutOfMemoryError
:内存出现OOM时生成Heap转储文件-XX:HeapDumpPath
:设置Heap转储文件的路径。示例:-XX:HeapDumpPath=/home/tmp/test.hprof
其它
-XX:+PrintFlagsInitial
:打印所有XX选项的默认值-XX:+AggressiveOpts
,加快编译,优化代码(Enables the use of aggressive performance optimization features)-XX:-UseBiasedLocking
。启用偏向锁。默认是打开的。
参考
本文来自博客园,作者:花酒锄作田,转载请注明原文链接:https://www.cnblogs.com/XY-Heruo/p/15599280.html