常用的JVM参数
参数名 | 作用 | 参数示例 | 备注 |
---|---|---|---|
-Xmx/-XX:MaxHeapSize | 设置最大堆大小 | 2048m,堆最大为2048m | 通常-Xmx与-Xms的值设置为一样 防止堆大小动态伸缩 |
-Xms/-XX:InitialHeapSize | 设置初始堆大小 | 2048m,堆初始大小为2048m | |
-Xmn/-XX:NewSize | 设置新生代大小 | 1229m,新生代大小为1229m | |
-XX:MetaspaceSize | 设置元空间初始大小 JDK8之后出现的内存区域,之前是永久代 | 256m,元空间初始大小为256m | 存放类信息(方法、属性等信息) |
-XX:MaxMetaspaceSize | 设置元空间最大值 | 256m,元空间最大大小为256m | 与堆一样,通常将初始值和最大值设置为相同值 |
-XX:SurvivorRatio | 设置新生代中Eden区,Survivor区的比例,默认为8 | 8, Eden:Survivor(To):Survivor(From)=8:1:1 | 该比例如果设置不当,会导致对象经常进入老年代,频繁触发FullGC,影响系统性能 |
-XX:PretenureSizeThreshold | 设置大对象的阈值,在JVM中大对象会直接进入老年代 | 5m,超过5m的对象直接进入老年代 | |
-XX:MaxTenuringThreshold | 设置对象经过多少次GC后才会进入老年代 | 默认15,即经过15次YGC后还存活的对象会进入老年代 | 超过该阈值的才会进入老年代 |
-XX:+UseParNewGC | 指定新生代垃圾回收器为ParNew | ParNew回收器一般用在Server模式下 | |
-XX:ParallelGCThreads | 指定ParNew收集器的线程数 | 一般不设置 | |
-XX:+UseConcMarkSweepGC | 指定老年代垃圾回收器为CMS | CMS是多线程的并发垃圾回收器 | |
-XX:+UseG1GC | 指定垃圾回收器为G1 | G1一般用在大内存机器上,它能够指定每次GC的时间 | |
-XX:MaxGCPauseMills | 设置GC1回收器每次执行GC最大STW时间 | ||
-XX:InitiatingHeapOccupancyPercent | 指定在使用G1回收器时老年代最大内存占用比例 | 默认为45,即当老年代内存占比达到45%时执行Mixed GC | |
-XX:G1MixedGCCountTarget | G1收集器在混合回收阶段执行混合回收的次数 | 默认为8,即混合回收执行8次,每执行完一次混合回收就会开启工作线程对外提供服务,降低STW对系统性能的影响 | |
-XX:G1HeapWastePercent | 设置G1回收器Region空闲比例 | 默认为5,当Region空闲的比例达到5%后,混合回收结束 | |
-XX:G1MixedGCLiveThresholdPercent | 设置G1回收器在确定回收Region时要确保该Region中的存活对象在85%以下,否则使用复制算法的G1回收器的回收效率是非常低的 | ||
-XX:+PrintGCDetails | 打印GC日志 | ||
-XX:+PrintGCTimeStamps | 打印GC时间 | ||
-Xloggc: | 将GC日志打印到指定文件中 | gc.log,将GC日志打印到文件中 | |
-XX:+PrintTenuringDistribution | 打印GC年龄 | ||
-XX:CMSInitiatingOccupancyFaction | 老年代内存使用达到多少后触发FullGC | 默认92,即老年代内存达到92后触发FullGC | |
-XX:+UseCMSInitiatingOccupancyOnly | 设置仅当老年代内存使用率达到阈值后才触发FullGC | 需要和上一个参数配套使用,如果不设置该参数,则第一次FullGC,JVM会采用上面参数设置阈值,之后会根据JVM在运行时采集的数据来动态调整这个数值 | |
-XX:+CMSParallelInitialMarkEnabled | 在CMS执行初始标记时使用度线程执行,减少STW | ||
-XX:+UseCMSCompactAtFullCollection | 设置CMS执行FullGC后进行内存整理 | ||
-XX:CMSFullGCsBeforeCompaction | 设置执行多少次FullGC后对老年代内存进行整理 | 默认为0,即每次执行完FullGC都对老年代内存进行整理 | 老年代使用的是标记清理的垃圾回收算法,会产生大量内存碎片,因此需要整理内存,否则会增加FullGC的触发频率 |
-XX:+CMSScavengeBeforeRemark | CMS执行重新标记前执行YGC,减少重新标记时间 | ||
-XX:+CMSParallelRemarkEnabled | CMS执行重新标记时使用多线程执行,降低STW时间 | ||
-XX:+PrintHeapAtGC | 每次执行GC前都打印GC堆信息 | ||
-XX:+DisableExplicitGC | 禁止在代码中触发GC,如System.gc() | ||
-Xss/-XX:ThreadStackSize | 设置栈的内存大小 | 1m,栈内存大小为1m | |
-XX:+PrintCommandLineFlags | 查看当前JVM的运行参数 | ||
-XX:+PrintGCApplicationStoppedTime | 输出GC造成应用暂停的时间 |