JVM常用配置参数说明
堆设置
-Xms256M
初始堆大小256M,默认为物理内存的1/64
-Xmx1024M
最大堆大小1024M,默认为物理内存的1/4,等于与-XX:MaxHeapSize=64M
-Xmn64M
年轻代大小为64M(JDK1.4后支持),相当于同时设置NewSize和MaxNewSize为64M
-XX:NewSize=64M
初始年轻代大小
-XX:MaxNewSize=256M
最大年轻代大小(默认为堆最大值的1/3)
-XX:OldSize=64M
年老代大小64M(测试验证JDK1.8.191该参数设置无效,JDK11下设置成功)
-XX:NewRatio=4
年老代:年轻代=4:1,默认值2
-XX:SurvivorRatio=8
年轻代中,2个Survivor区与1个Eden区比例=2:8,Survivor占新生代内存比例为1/5,默认值8
-XX:MaxHeapFreeRatio=70
堆内存使用率大于70时扩张堆内存,xms=xmx时该参数无效,默认值70
-XX:MinHeapFreeRatio=40
堆内存使用率小于40时缩减堆内存,xms=xmx时该参数无效,默认值40
备注
堆大小=年轻代(Young Generation)+年老代(Old Generation),网上有同学将持久代归为堆内存,感觉是错误的。
年轻代=伊甸园区(Eden Space) + 幸存者区(Survivor Space,Serial收集器有2个相同容量的幸存者区,分别叫From和To,G1收集器只有一个,此处是个人理解,不一定正确)。
持久代设置(共享内存的非堆区域)
-XX:PermSize=56M
初始分配的持久代容量,默认为物理内存的1/64(从1.8起,该参数已作废,可使用-XX:MetaspaceSize
替代)
-XX:MaxPermSize=56M
持久代的最大容量,默认为物理内存的1/4,设置值过小会导致java.lang.OutOfMemoryError: PermGen space
错误。(从1.8起,该参数已作废,可使用-XX:MaxMetaspaceSize
替代)
元空间(共享内存的非堆区域,JDK1.8新增)
-XX:MetaspaceSize=64M
触发FullGC阈值,默认21807104B,约20.8M,而且Metaspace内存容量到达该阈值后,每次扩容都有可能会触发FullGC
-XX:MaxMetaspaceSize=512M
最大元空间大小,默认无限制
虚拟机线程堆栈
-Xss128k
设置每个线程的堆栈大小。JDK 5以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右
GC相关
-Xnoclassgc
关闭JVM垃圾回收功能
-XX:+UseSerialGC
使用Serial垃圾收集器,单线程串型收集器(client模式默认垃圾收集器)
-XX:+UseParNewGC
Serial收集器的多线程升级版
-XX:+UseParallelGC
使用Parallel垃圾收集器(JDK1.8默认收集器),优点吞吐量高
-XX:+UseConcMarkSweepGC
使用CMS垃圾收集器,优点低延迟
-XX:+UseG1GC
使用G1垃圾回收器(新一代,重点关注),优点低延迟
-XX:+PrintCommandLineFlags
打印虚拟机默认参数
-XX:+DisableExplicitGC
静止Java程序中的FULL GC,如System.gc()
-XX:+PrintGC
GC时打印信息
-XX:+PrintGCDetails
GC时打印详细信息(JDK11已过期,新版本使用-Xlog:gc
代替)
-XX:+PrintGCTimeStamps
打印CG发生的时间戳
-XX:+PrintGCDateStamps
输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC
GC时打印堆前后信息
-XX:+PrintTenuringDistribution
用于显示每次Minor GC(年轻代GC)时Survivor区中各个年龄段的对象的大小
-XX:InitialTenuringThreshol
年轻代对象转换为老年代对象最小年龄值,默认值7,对象在坚持过一次Minor GC之后,年龄就加1
-XX:MaxTenuringThreshold
年轻代对象转换为老年代对象最大年龄值,默认值15
-Xloggc:filename
将GC信息输出到文件,带时间戳(如-Xloggc:E:\gc.txt
,JKD11已过期,新版本使用-Xlog:gc:gc.txt
代替,日志内容见下图)
-Xlog:gc
输出GC日志信息(JDK11新增)
其他
-XX:+HeapDumpOnOutOfMemoryError
内存溢出时Dump出当前堆内存快照
-XX:HeapDumpPath=filename
导出路径(如-XX:HeapDumpPath=E:/a.dump
)
-XX:PretenureSizeThreshold=10240
对象大小超过10KB时直接在年老代分配内存。默认值0,单位字节,表示所有的对象都在年轻代eden区分配