记录一下常用的jvm参数
##VM常见参数
参数 | 作用 |
---|---|
-server | 服务器模式,jvm初始化时间更久但jvm效率更高 |
-client | 客户端模式 |
-XX:+TieredCompilation | 进行两次JIT编译先进行-client编译再进行-server编译 |
-XX:+PrintCompilation | 打印JIT信息,适合测试时使用 |
-d64 | 64位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:+HeapDumpOnOutOfMemoryError | OutOfMemoryError时候生成堆转存文件 |
-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后老年代的占用量 |