JVM垃圾收集器

串行收集器
  1.最古老的收集器
  2.当进行垃圾回收的时候,回收线程是串行执行的,时间久,可能会产生较长停顿
  3.-XX:+UseSerialGC
    新生代、老年代使用串行回收
    新生代复制算法
    老年代标记-压缩

 

 

并行收集器
  a.ParNew
    1.新生代并行,老年代串行
    2.是串行收集器新生代的并行版本
    3.采用复制算法
    4.多线程,需要多核支持
    5.-XX:+UseParNewGC
    6.-XX:ParallelGCThreads 限制线程数量
  b.Parallel
    1.类似ParNew
    2.新生代赋值算法,老年代标记-压缩算法
    3.-XX:+UseParallelGC      使用Parallel收集器+ 老年代串行
    4.-XX:+UseParallelOldGC 使用Parallel收集器+ 并行老年代

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

 

CMS收集器
  1.Concurrent Mark Sweep 并发标记清除
  2.标记-清除算法(由于是并发执行的,所以不能使用标记压缩算法,否则程序寻址会懵逼)
  3.并发阶段会降低吞吐量,且由于是和用户线程一起运行,所以难免会清理不彻底
  4.老年代收集器(新生代使用ParNew)
  5.-XX:+UseConcMarkSweepGC
  6.CMS运行过程比较复杂,着重实现了标记的过程,可分为
    a.初始标记
      根可以直接关联到的对象,速度快
    b.并发标记(和用户线程一起)
      主要标记过程,标记全部对象
    c.重新标记
      由于并发标记时,用户线程依然运行,因此在正式清理前,再做修正
    d.并发清除(和用户线程一起)
      基于标记结果,直接清理对象

 

posted @ 2017-06-03 17:01  413Xiaol  阅读(377)  评论(0编辑  收藏  举报