JVM优化系列-常用GC参数总结

导语
  在之前的分享中,提到了很多的JVM的参数这篇分享就来总结一下在实际中常用到的一些JVM的参数

文章目录

    • 基本参数
    • 1、与串行回收器相关的参数
    • 2、与并行GC相关的参数
    • 3、与CMS回收器相关的参数
    • 4、与G1 回收器相关的参数
    • 5、TLAB相关参数
    • 6、其他参数

基本参数

格式一般都是由-X构成

  • -Xms: 如果在运行的时候给定这个参数,表示初始化堆大小,这个堆是包含了Eden,包含了old,整个堆的初始化大
    小,比如你给他800M,那它就会根据800M去分配年轻代和老年代,及持久代

  • -Xmx: 最大堆大小,初始是多大,如果不够最多能够申请到多大,允许申请的最大大小

  • -XX:NewSize=n 这个是设置年轻代的大小,上面两个颗粒度更粗一些,这里的颗粒度很细一些,这里是年轻代的
    大小

  • -XX:NewRatio=n 这里也是设置年轻代的大小,不同的是NewSize给的是具体的单位,比如800M,500M,ratio是
    比率,按照多大的比率去设置各代的大小

  • -XX:SurvivorRatio=n Survivor比例是设置Suvivor区的比例,是s0和s1相对于Eden区域的大小,
    年轻代默认的比例是8:1:1,8是Eden,1和1是s0和s1,那么我们可能会根据需要去调整,缩小Eden区的大小,
    扩大Survivor区的大小,s0或者s1的大小,那么我们就可以用这个命令了,不让他8:1:1走

  • -XX:MaxPermSize=n Permanent单词,持久的单词

  • -XX:+UseSerialGC 设置串行收集器来手机年轻代

  • -XX:+UseParallelGC 如果我想用Parallel并行收集器

  • -XX:+UseParallelOldGC 如果我们想要老年代的并行收集器就用它

  • -XX:+UseConcMarkSweepGC 注意CMS不叫ConcurrentMarkSweep,它简写了,这后面不需要跟任何的参数,这个是收集器的指定

1、与串行回收器相关的参数

  • -XX:+UseSerialGC:在新生代和老年代都使用串行收集器
  • -XX:SurvivorRatio:设置eden区和Survivor区大小的比例
  • -XX:PretenureSizeThreshold:设置大对象直接进入老年代的阈值,当对象的大小超过这个值的时候,就直接再老年代进行分配
  • -XX:MaxTenuringThreshold:设置对象进入老年代的年龄最大值,每次Minor GC后,对象年龄就增加1,任何大于这个年龄的对象,一定会进入到老年代。

2、与并行GC相关的参数

  • -XX:+UsePerNewGC:在新生代使用并行收集器
  • -XX:+UseParallelOldGC:老年代使用并行回收器进行收集
  • -XX:+ParallelGCThreads:设置用于垃圾回收的线程数,通常情况下可以和CPU的数量相等,但是CPU数量比较多的情况下,设置相对较小的数值也是合理的。
  • -XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间。它的值是一个大于0的整数,收集器在工作的时候,会调整Java堆大小或者一些其他的参数,尽可能地把停顿时间控制在MaxGCPauseMillis 以内。
  • +XX:GCTimeRatio:设置吞吐量大小。它的值是一个0到100之间的整数。假设GCTimeRatio的值为n。那么系统将花费不超过1/(1+n)的时间用来进行垃圾收集。
  • +XX:+UseAdaptiveSizePolicy:打开自适应GC策略。在这种模式下,新生代的大小、eden和Survivor 的比例、晋升老年代的对象年龄等参数会被自动调整,达到在堆大小、吞吐量和停顿时间之间的平衡点。

3、与CMS回收器相关的参数

  • -XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
  • -XX:+ParallelCMSThreads:设定CMS的线程数量
  • -XX:CMSInitiatingOccupancyFraction:设置CMS 收集器在老年代空间被使用多少后触发,默认是68%
  • -XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片整理
  • -XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
  • -XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收
  • -XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS(前提是-XX:+CMSClassUnloadingEnabled激活)
  • -XX:UseCMSInitiatingOccupancyOnly:表示只在到达阈值的时候才进行CMS回收
  • -XX:+CMSIncrementalMode:使用增量模式,比较适合单CPU。增量模式在JDK8中标记为废弃,并将在JDK9中彻底移除

4、与G1 回收器相关的参数

  • -XX:+UseG1GC:使用G1回收器
  • -XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间
  • -XX:GCPauseIntervalMillis:设置停顿间隔时间

5、TLAB相关参数

  • -XX:+UseTLAB:开启TLAB分配
  • -XX:+PrintTLAB:打印TLAB相关分配信息
  • -XX:TLABSize:设置TLAB大小
  • -XX:+ResizeTLAB:自动调整TLAB大小

6、其他参数

  • -XX:+DisableExplicitGC:禁用显示GC
  • -XX:+ExplicitGCInvokesConcurrent:使用并发方式处理显示GC

你可能感兴趣的:(JVM系列)