通用参数
-Xms 堆内存初始大小
-Xmx 堆内存最大大小
-Xmn 新生代大小
-Xss 线程大小
-XX:+UserG1GC 指定使用G1垃圾回收器
-XX:SurvivorRatio eden区和一个survivor区比例 eden/survivor 注意S区有两个
-XX:MaxTenuringThreshold 新生代进入老年代的年龄(即在新生代躲过了几次GC)
-XX:-UseAdaptiveSizePolicy 关闭Survivor区大小动态变化
-XX:PretenureSizeThreshold 大对象直接晋升老年代阈值
-XX:+DisableExplicitGC 禁止显示执行GC 不允许代码触发GC 例如 System.gc()
OOM
-XX:+HeapDumpOnOutOfMemoryError 表示当JVM发生OOM时,自动生成DUMP文件。
-XX:HeapDumpPath=${目录} 表示生成DUMP文件的路径,也可以指定文件名称
GC日志
· -XX:+PrintGCDetails 打印gc日志
· -XX:+PrintGCTimeStamps 打印gc时间戳(相对于jvm启动时间)
· -XX:+PrintGCDateStamps 打印gc当前时间
· -Xloggc:gc.log 将gc日志输出到log文件
· XX:+PrintHeapAtGC 每次一次GC后,都打印堆信息
· -XX:+PrintGCApplicationStoppedTime GC停顿时间
CMS回收器:
-XX:+UseConcMarkSweepGC 启用CMS回收器
-XX:CMSInitiatingOccupancyFaction 指定老年代的空间使用率达到xx触发full gc 因为并发收集的时候可能会有新对象进入老年代
-XX:+UserCMSCompactAtFullCollection 使用CMS触发Full GC之后进行压缩 (避免内存碎片)
-XX:CMSFullGCBeforeCompaction 执行多少次Full GC后进行压缩 默认0
-XX:+CMSParallelInitialMarkEnabled CMS回收”初始标记“阶段开启多线程并发执行
-XX:CMSScavengeBeforeRemark 在CMS”重新标记“阶段之前 尽量执行一次Young GC
G1回收器
-XX:+UserG1GC 指定使用G1辣鸡回收器
-XX:G1HeapRegionSize 指定Region的大小
-XX:G1NewSizePercent 设置新生代初始占比 默认5%
-XX:MaxTenuringThreshold 新生代进入老年代的年龄(即在新生代躲过了几次GC)
-XX:InitiatingHeapOccupancyPercent 老年代占据了堆内存的Percent%时,就会尝试触发一个新生代+老生代一期回收的混合回收阶段 即Mixed GC 默认值45%
-XX:MaxGCPauseMills G1执行GC的时候最多可以让系统停顿多长时间 默认200ms
-XX:G1MixedGCCountTarget 在一次混合回收的过程中,最后一个阶段执行混合回收的次数 默认8次
-XX:G1HeapWastePercent 当空闲的Region数量达到了堆内存的Percent%,此时就会立即停止混合回收,意味着本次混合回收就结束了 默认值5%(在混合回收的时候,对Region回收都是基于复制算法进行的,都是把要回收的Region里的存活对象放入其他region,然后这个Region中的垃圾对象全部清理调,这样的话在回收过程就会不断空出来新的Region)
-XX:G1MixedGCLiveThresholdPercent 回收Region时,必须是存活对象低于Percent%的Region才可以进行回收 默认85% (如果存活对象过多,复制算法成本会很高)
元数据区
-XX:TraceClassLoading :追踪类加载
-XX:TraceClassUnloading: 追踪类卸载
大量反射场景
-XX:SoftRefLRUPolicyMSPerMB 提高这个数值就是让反射过程中JVM自动创建的软引用的一些类的class对象不要被随便回收