说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这个就先这样吧,知识储备还不足it