JVM参数设置、分析

JVM参数设置、分析

不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主要cup个数,内存不同),所以使用的GC种类也会不同(如何选择见GC种类及如何选择)。本文将注重介绍JVM、GC的一些重要参数的设置来提高系统的性能。

设置堆大小
  • -Xms 初始堆大小 物理内存的1/64(<1GB)
  • -Xmx 最大堆大小 物理内存的1/4(<1GB)
设置年轻代大小
  • -Xmn 年轻代大小(1.4or lator)
  • -XX:NewSize 设置年轻代大小(for 1.3/1.4)
  • -XX:MaxNewSize 年轻代最大值(for 1.3/1.4)
设置持久代大小
  • -XX:PermSize 设置持久代(perm gen)初始值 物理内存的1/64
  • -XX:MaxPermSize 设置持久代最大值 物理内存的1/4
设置虚拟机栈大小
  • -Xss:每个线程的堆栈大小
  • -XX:ThreadStack Size Thread Stack Size
设置空间比例
  • -XX:NewRatio 年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)
  • -XX:SurvivorRatio Eden区与Survivor区的大小比值
其他
  • -XX:LargePageSizeInBytes 内存页的大小不可设置过大, 会影响Perm的大小
  • -XX:+UseFastAccessorMethods 原始类型的快速优化
  • -XX:+DisableExplicitGC 关闭System.gc()
  • -XX:MaxTenuringThreshold 垃圾最大年龄
  • -XX:+AggressiveOpts 加快编译
  • -XX:+UseBiasedLocking 锁机制的性能改善
  • -Xnoclassgc 禁用class回收
  • -XX:SoftRefLRUPolicyMSPerMB 每兆堆空闲空间中SoftReference的存活时间
  • -XX:PretenureSizeThreshold 对象超过多大是直接在旧生代分配
  • -XX:TLABWasteTargetPercent TLAB占eden区的百分比
  • -XX:+CollectGen0First FullGC时是否先YGC
并行收集器相关参数
  • -XX:+UseParallelGC Full GC采用parallel MSC(此项待验证)
  • -XX:+UseParNewGC 设置年轻代为并行收集
  • -XX:ParallelGCThreads 并行收集器的线程数
  • -XX:+UseParallelOldGC 年老代垃圾收集方式为并行收集(Parallel Compacting)
  • -XX:MaxGCPauseMillis 每次年轻代垃圾回收的最长时间(最大暂停时间)
  • -XX:+UseAdaptiveSizePolicy 自动选择年轻代区大小和相应的Survivor区比例
  • -XX:GCTimeRatio 设置垃圾回收时间占程序运行时间的百分比
  • -XX:+ScavengeBeforeFullGC Full GC前调用YGC
CMS 相关参数
  • -XX:+UseConcMarkSweepGC 使用CMS内存收集
  • -XX:+AggressiveHeap 试图使用大量的物理内存
  • -XX:CMSFullGCsBeforeCompaction 多少次后进行内存压缩
  • -XX:+CMSParallelRemarkEnabled 降低标记停顿
  • -XX+UseCMSCompactAtFullCollection 在FULL GC的时候, 对年老代的压缩
  • -XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集
  • -XX:CMSInitiatingOccupancyFraction=70 使用cms作为垃圾回收使用70%后开始CMS收集
  • -XX:CMSInitiatingPermOccupancyFraction 设置Perm Gen使用到达多少比率时触发
  • -XX:+CMSIncrementalMode 设置为增量模式
  • -XX:+CMSClassUnloadingEnabled CMS收集器默认不会对永久代进行垃圾回收。如果希望对永久代进行垃圾回收
辅助信息
  • -XX:+PrintGC
  • -XX:+PrintGCDetails
  • -XX:+PrintGCTimeStamps
  • -XX:+PrintGC:PrintGCTimeStamps 可与-XX:+PrintGC -XX:+PrintGCDetails混用
  • -XX:+PrintGCApplicationStoppedTime 打印垃圾回收期间程序暂停的时间.可与上面混合使用
  • -XX:+PrintGCApplicationConcurrentTime 打印每次垃圾回收前,程序未中断的执行时间.可与上面混合使用
  • -XX:+PrintHeapAtGC打印GC前后的详细堆栈信息
  • -Xloggc:filename 把相关日志信息记录到文件以便分析.与上面几个配合使用
  • -XX:+PrintClassHistogram garbage collects before printing the histogram.
  • -XX:+PrintTLAB 查看TLAB空间的使用情况
  • -XX:+PrintTenuringDistribution 查看每次minor GC后新的存活周期的阈值
#

评论

`
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×