:CMSInitiatingOccupancyFraction : 设置CMS收集器在老年代空间使用多少后触发,默认68%
-XX:+UseCMSCompactAtFullCollection : 设置CMS收集器在完成垃圾收集后是否进行一次内存碎片整理
-XX:CMSFullGCsBeforeCompation : 设置多少次CMS垃圾回收后进行内存压缩
-XX:+CMSClassUnloadingEnabled : 允许对类元数据进行回收
-XX:+CMSParallelRemarkEnabled : 启用并行标记
-XX:CMSInitiatingPermOccupancyFraction : 永久区达到此阈值,启动CMS回收(前提是 -XX:CMSClassUnloadingEnabled激活)
-XX:UseCMSInitiatingOccupancyOnly : 达到阈值才进行CMS回收
-XX:+CMSIncrementalMode : 使用增量模式,适合单CPU
4) 与G1回收器相关参数
-XX:+UseG1GC : 使用G1回收器
-XX:+UnlockExperimentalVMOptions : 允许使用实验性参数
-XX:MaxGCPauseMillis : 设置最大垃圾停顿时间
-XX:GCPauseIntervalMillis : 设置垃圾收集间隔时间
5) 其他参数
-XX:+DisableExplicitGC : 禁用显示GC
5.4 常用调优案例和方法
1) 将新对象预留在新生代 : 新生代的垃圾回收速度高于老年代回收,可设置新生代大小或者新生代和老年代比例调整新生代大小
2) 大对象进入老年代 : 大对象需要空间,可能导致空间不足或者需要移动大量小对象到老年代,设置-XX:PretenureSizeThreshold
3) 设置对象进入老年代的年龄 : gc一次年龄+1,年龄到达阈值进入老年代,设置阈值 -XX:MaxTenuringThreshold
4) 稳定与震荡的堆大小 : 空间大GC速度慢,空间小GC速度快,大部分设置最大最小相同
-XX:MinHeapFreeRatio : 设置堆空间最小空闲比例,默认40;
-XX:MaxHeapFreeRatio : 设置对空间最大空闲比例,默认70;
5) 吞吐量优先案例 : java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
6) 使用大页案例 : java -Xmx2506m -Xms2506 -Xmn1536m -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:LargePageSizeInBytes=256m (设置大页大小)
7) 降低停顿案例 : java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC _XX:+UseParNewGC -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=31
5.5 实用JVM参数
1) JIT(Just-In-Time)编译参数 : 运行时,函数运行次数超过阈值,将字节码编译成本地代码提高执行效率,
-XX:CompileThreshold : 编译阈值
-XX:+PrintCompilation : 打印JIT编译信息
-XX:+CITime 打印JIT编译的基本信息
2) 堆快照(堆Dump) : 发生OOM时导出Dump文件,可以使用Visual VM等工具分析
-XX:+HeapDumpOnOutOfMemoryError : 发生OOM时导出当前堆快照
-XX:HeapDumpPath : 指定堆快照信息保存文件位置
3) 错误处理 : 发生OOM时运行第三方脚本
-XX:OnOutOfMemoryError=c:\reset.bat
4) 取得GC信息
-verbose: