JVM常用参数总结

本文是对Java8 JVM参数解读的总结


1、堆设置

##设置初始年轻代堆大小
-Xmn512m

##设置初始的年轻代的大小,该参数等价于-Xmn。
-XX:NewSize=512m

设置最大的年轻代的堆大小。默认自动检测。
-XX:MaxNewSize=512m

##设置初始的堆大小
-Xms2048m

##设置最大的内存分配大小。一般的服务端部署,-Xms和-Xmx设置为同样大小。与-XX:MaxHeapSize具有同样的作用
-Xmx2048m

##设置最大堆大小,这个值需要大于2MB,且是1024的整数倍。等价于-Xmx
-XX:MaxHeapSize=2048m

##eden区和survivor区的比例。默认是8。
-XX:SurvivorRatio=8

##设置年轻代和年老代的比例,默认是2。
-XX:NewRatio=3

##设置最大元空间大小
-XX:MaxMetaspaceSize=128m

##设置元空间大小
-XX:MetaspaceSize=128m


2、收集器设置

##设置让CMS也支持老年代的回收。默认是不开启的,如果开启,那么-XX:+UseParNewGC也会自动被设置。Java 8 不支持-XX:+UseConcMarkSweepGC -XX:-UseParNewGC这种组合。
-XX:+UseConcMarkSweepGC

##支持在年轻代用多线程进行垃圾收集。默认不开启,使用-XX:+UseConcMarkSweepGC时会自动被开启。
-XX:+UseParNewGC

##设置使用G1作为GC收集器。G1比较推荐在大堆应用场景下使用(大于6GB)。
-XX:+UseG1GC

##支持并行的垃圾收集器,即throughput垃圾收集。这可以在多核处理器下提升垃圾收集性能。默认不开启,收集器由系统根据JVM和机器配置自动选择。开启后-XX:+UseParallelOldGC选项也自动开启。
-XX:+UseParallelGC

##支持FULL GC的并行收集器。默认不开启。
-XX:+UseParallelOldGC

##支持使用串行收集器。默认不开启。
-XX:+UseSerialGC

3、收集器扩展配置

##设置在使用G1收集器时Java堆被划分为子区域的大小。在1MB到32MB之间,默认会根据Java堆的大小自动检测。
-XX:G1HeapRegionSize=size

##设置并行标记的线程数。将 n 设置为并行垃圾回收线程数 (-XX:ParallelGCThreads) 的 1/4 左右,默认值是CPU数。
-XX:ConcGCThreads=2

##并行GC时的线程数。默认值是CPU数。
-XX:ParallelGCThreads=threads

##关闭显式GC调用,即关闭System.gc()。默认是可以调用的
-XX:+DisableExplicitGC

##设置一个最大的GC停顿时间(毫秒),这是个软目标,JVM会尽最大努力去实现它,默认没有最大值设置。
-XX:MaxGCPauseMillis=time

##设置一个触发并发GC的堆占用百分比。这个值对于基于整体内存的垃圾回收器有效,比如G1。默认是45%,如果设置为0表示无停顿GC。
-XX:InitiatingHeapOccupancyPercent=percent

##设置一个堆内存的百分比用来作为false ceiling,从而降低使用G1时晋升失败的可能性。默认是10%。
-XX:G1ReservePercent=percent

##设置GC evacuation(疏散)阶段期间G1 GC更新RSets消耗时间的百分比(默认是目标停顿时间的10%)。你可以增大或减小百分比的值,以便在stop-the-world(STW)GC阶段花费更多或更少的时间,让concurrent refinement thread处理相应的缓冲区。
记住,减少百分比的值,你在推迟concurrent refinement thread的工作;因此,你会看到并发任务增加。
-XX:G1RSetUpdatingPauseTimePercent=10

##配合-XX:G1RSetUpdatingPauseTimePercent使用,增加处理相应的缓冲区线程数
-XX:G1ConcRefinementThreads

##参数 -XX:+PrintTenuringDistribution 指定JVM 在每次新生代GC时,输出幸存区中对象的年龄分布。例如:
-XX:+PrintTenuringDistribution

##通过 -XX:InitialTenuringThreshold 和 -XX:MaxTenuringThreshold 可以设定老年代阀值的初始值和最大值
-XX:InitialTenuringThreshold
-XX:MaxTenuringThreshold

设置在YGC后的期望的survivor空间占比。默认是50%。
-XX:TargetSurvivorRatio=percent


4、GC统计信息设置

##打印每次GC的细节信息。默认不打印。
-XX:+PrintGCDetails

##打印每个GC的日期时间戳。默认不打印。
-XX:+PrintGCDateStamps

##打印每次GC的时间戳。默认不打印。
-XX:+PrintGCTimeStamps

##设置GC日志输出位置
-Xloggc:/export/home/tomcat/logs/jvm/gc.log


5、JVM异常日志设置

##设置虚拟机运行日志存储路径
-XX:LogFile=/export/home/tomcat/logs/jvm/hotspot.log

当不可恢复的错误发生时,错误信息记录到哪个文件
-XX:ErrorFile=/export/home/tomcat/logs/jvm/jvm_error.log

##在jvm出现错误(不可恢复)的时候,获取dump日志
-XX:OnError="gcore %p;dbx - %p"

##内存溢出配置
-XX:+HeapDumpOnOutOfMemory
##堆快照存储路径
-XX:HeapDumpPath=/export/home/tomcat/logs/jvm/jvm_heapdump.hprof
##在内存溢出时,指定命令,可执行特定shell脚本通知
-XX:OnOutOfMemoryError=


6、编译设置

##初始化的code cache的大小,默认500KB。这个值应该不小于系统最小内存页的大小。
-XX:InitialCodeCacheSize=size

##设置为了JIT编译代码的最大代码cache大小。这个设置默认是240MB,如果关掉了tiered编译,则大小是48MB。
这个设置必须比初始化的-XX:InitialCodeCacheSize=size设置值大。
-XX:ReservedCodeCacheSize=size

##设置最大内联方法的代码长度,默认是1000字节,只有小于这个设置的方法才会被编译内联。
-XX:InlineSmallCode=size

##编译时日志输出,在编译时会有一个hotspot.log的日志输出到当前工作目录下。
可以用-XX:LogFile指定不同的目录。默认这个参数是关闭的,即编译日志不输出。
这个参数需要和-XX:UnlockDiagnosticVMOptions一起使用。也可以使用-XX:+PrintCompilation选项在控制台打印编译过程信息。
-XX:+LogCompilation

##编译内联的方法的最大byte code大小。默认是35,高于35个字节的字节码不会被内联。
-XX:MaxInlineSize=size

编译时的编译器线程数。server版的JVM默认设置为2,client版本默认设置为1。如果tiered编译开启,则会伸缩到核数个线程。
-XX:CICompilerCount=threads


7、其它

##按下Ctrl+Break后,打印类的信息
-XX:+PrintClassHistogram

##使用大页内存
-XX:+UseLargePages

##设置大页内存大小
-XX:LargePageSizeInBytes=4m

##设置thread stack大小,一般默认的几个系统参数如下:Linux/x64 (64-bit): 1024 KB
-Xss1024k

##设置thread-local allocation buffer (TLAB)的初始化大小。
-XX:TLABSize=size

猜你喜欢

转载自blog.csdn.net/u012834750/article/details/81537151