记录一下常用的jvm参数

##VM常见参数

参数作用
-server服务器模式,jvm初始化时间更久但jvm效率更高
-client客户端模式
-XX:+TieredCompilation进行两次JIT编译先进行-client编译再进行-server编译
-XX:+PrintCompilation打印JIT信息,适合测试时使用
-d6464位VM
-XX:+UseCompressedOops使用压缩指针,对64位VM有效,可以提高效率,但-Xmx不能大于32g
-Xms(n)初始堆大小
-Xmx(n)最大堆大小
-Xmn(n)年轻代大小
-XX:PermSize=(n)永久代大小,jvm8失效
-XX:MaxPermSize=(n)最大永久代大小,jvm8失效
-XX:NewRatio(n)年轻代与老年代的比例,n=3 -> 年轻代 : 年老代 = 1 : 4
-XX:SurvivorRatio(n)Eden区与Survivor区的大小比值,可以显式控制对象老化

##GC日志

参数作用
-Xloggc:(filename)将GC日志打印到文档
-XX:+PrintGCDetails打印GC日志
-XX:+PrintGCDateStamps每次GC时打印时间戳到日志
-XX:+PrintTenuringDistribution对象晋升的日志
-XX:+HeapDumpOnOutOfMemoryErrorOutOfMemoryError时候生成堆转存文件
-XX:HeapPath=(path)堆转存文件的保存路径

##收集器相关参数

参数作用
-XX:+UseSerialGC使用单线程收集器,不建议使用
-XX:+UseParallelGC新生代使用多线程收集器,老年代使用单线程收集器
-XX:+UseParallelOldGC新生代、老年代都使用多线程收集器
-XX:+UseConcMarkSweepGC新生代使用多线程收集器,老年代使用CMS收集器,需要对新生代、Survivor、CMS周期进行细致优化
-XX:+UseParNewGC新生代使用ParNew多线程收集器,老年代使用CMS收集器
-XX:+UseG1GC不分代,采用G1收集器
-XX:ParallelGCThreads=(n)GC线程数,默认为 8 + (核数 - 8) * 5 / 8
-XX:MaxTenuringThreshold=(n)年轻代对象最大年龄
-XX:CMSInitiatingOccupancyFaction=(n)老年代占比达到这个比例会触发第一次CMS回收,后续回收点由HotSpot计算
-XX:+useCMSInitiatingOccupancyOnly老年代占比达到CMSInitiatingOccupancyFaction比例后才会触发CMS回收
-XX:+CMSScavengeBeforeRemark在执行CMS重新标记之前执行MinorGC,可以减少CMS持续时间
-XX:+ScavengeBeforeFullGC在执行FullGC之前执行MinorGC,VM会分2次停顿,可以缩短最大停顿时间
-XX:MaxGCPauseMillis=(n)最大GC停顿时间,这是个软目标,JVM将尽可能(但不保证)停顿小于这个时间
-XX:G1ReservePercent=(n)设置作为空闲空间的预留内存百分比,以降低目标空间溢出的风险。默认值是 10%。
-XX:G1HeapRegionSize=(n)设置的 G1 区域的大小。值是2的幂,范围是1 MB 到32 MB。目标是根据最小的 Java 堆大小划分出约 2048 个区域。

java堆大小计算法则

空间占用
java堆3~4倍FullGC后老年代的占用量
永久代1.2~1.5倍FullGC后永久代的占用量
新生代1~1.5倍FullGC后老年代的占用量