常用的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区的比例,默认为88, 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:G1MixedGCCountTargetG1收集器在混合回收阶段执行混合回收的次数默认为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:+CMSScavengeBeforeRemarkCMS执行重新标记前执行YGC,减少重新标记时间
-XX:+CMSParallelRemarkEnabledCMS执行重新标记时使用多线程执行,降低STW时间
-XX:+PrintHeapAtGC每次执行GC前都打印GC堆信息
-XX:+DisableExplicitGC禁止在代码中触发GC,如System.gc()
-Xss/-XX:ThreadStackSize设置栈的内存大小1m,栈内存大小为1m
-XX:+PrintCommandLineFlags查看当前JVM的运行参数
-XX:+PrintGCApplicationStoppedTime输出GC造成应用暂停的时间