阅读 88

GC参数

说GC参数前 先说下Java 中得三个收集器

串行收集器

  • 最古老,最稳定,效率高。
  • 可能会造成较长时间得停顿
  • -XX:+UseSerialGC,使用这收集器得时候,新生代、老年代使用串行回收,新生代使用复制算法,老年代使用标记-压缩算法

并行收集器

ParNew
  • -XX:+UseParNewGC:新生代并行,老年代串行
  • Serial收集器新生代得并行版本
  • 使用复制算法
  • 多线程,需要多核支持
  • -XX:ParallelGCThreads 限制线程数量
Parallel

类似于ParNew 新生代使用复制算法,老年代使用标记-压缩算法

他与ParNew相比更加管住吞吐量

  • -XX:+UseParallelGC : 使用Parallel收集器+老年代串行
  • -XX:+UseParallelOldGC : 使用Parallel收集器+并行老年代

关于并行收集器得参数

  • -XX:MaxGCPauseMills:最大停顿时间,单位毫秒,GC尽力保证回收时间不超过设定值
  • -XX:GCTimeRatio :0-100的取值范围,意思是垃圾收集时间占总时间的比,默认99,及最大允许1%时间做GC 其实这两个参数是矛盾的,因为停顿时间和吞吐量不可能同时调优

CMS收集器

Concurrent Mark Sweep 并发标记清除(与用户线程一起执行),使用标记清除算法。并发阶段会降低吞吐量

  • -XX:+UseConcMarkSweepGC
  • -XX:+ UseCMSCompactAtFullCollection: Full GC后,进行一次整理 整理过程是独占的,会引起停顿时间变长
  • -XX:+CMSFullGCsBeforeCompaction: 设置进行几次Full GC后,进行一次碎片整理
  • -XX:ParallelCMSThreads: 设定CMS的线程数量

GC 参数整理

  • -XX:+UseSerialGC:在新生代和老年代使用串行收集器
  • -XX:SurvivorRatio:设置eden区大小和survivior区大小的比例
  • -XX:NewRatio:新生代和老年代的比
  • -XX:+UseParNewGC:在新生代使用并行收集器
  • -XX:+UseParallelGC :新生代使用并行回收收集器
  • -XX:+UseParallelOldGC:老年代使用并行回收收集器
  • -XX:ParallelGCThreads:设置用于垃圾回收的线程数
  • -XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
  • -XX:ParallelCMSThreads:设定CMS的线程数量
  • -XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发
  • -XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
  • -XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
  • -XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收
  • -XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收
  • -XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收

emmm这个就先这样吧,知识储备还不足

关注下面的标签,发现更多相似文章
评论