HotSpot垃圾收集器

垃圾收集分两大块内容:

新生代垃圾收集、老年代垃圾收集

两者各有特性,在新生代内存中,大部分对象朝生夕死,GC的垃圾回收算法大多为复制算法

老年代内存中对象的存活率较高,古选择标记-整理、标记-清除算法较多

新生代收集器有三款:

Serial收集器、ParNew收集器、Parallel Scavenge收集器

Serial:是一款单线程的收集器,它工作时,会停止其他的工作线程,直到它收集结束;
  它是虚拟机在Client模式下的默认选择
ParNew:是Serial的升级版,不同之处在于,它工作时会使用多条线程并行处理垃圾收集;
  可以使用参数-XX:+UseParNewGC强制指定使用ParNew垃圾收集器
  在使用参数-XX:+UseConcMarkSweepGC后,默认的新生代收集器就是ParNew
Parallel Scavenge:是一款新生代的垃圾收集器,也使用复制算法,也是并行的多线程收集器;其侧重点和ParNew略有不同,ParallelScavenge的目标是达到可控的吞吐量(吞吐量=运行代码时间/(运行代码时间+垃圾收集时间));提高吞吐量则可以提高CPU的利用率,能尽快的完成运算任务,它适合在后台运算而不需要太多交互的任务;
  它使用两个参数精确控制吞吐量:-XX:MaxGCPauseMillis(控制最大停顿时间,单位是毫秒)、-XX:GCTimeRatio(控制吞吐量大小,范围是0~99,含义是垃圾收集时间占总时间的比率,默认值为1)
  它的-XX:+UseAdaptiveSizePolicy参数开启后,虚拟机会根据当前系统运行情况,动态调整选择最合适的停顿时间或者最大的吞吐量

老年代收集器也有三款:

CMS、Serial Old(MSC)、Parallel Old

CMS:它的目标是使老年代的垃圾回收停顿时间尽可能的缩短,垃圾收集使用标记-清除的算法,可以配合Serial、ParNew这两个新生代收集器使用
Serial Old:是Serial收集器的老年代版本,也是一个单线程的收集器,使用的是标记-整理算法
  它的用途,主要给client模式下的虚拟机使用;在jdk1.5版本之前,配合Parallel Scavenge新生代收集器使用;也是CMS的备用方案,当出现Concurrent Mode Failure时,CMS会切换为Serial Old模式
Parallel Old:它是Parallel Scavenge的老年代版本,也是并行的多线程收集器,使用的是标记-整理算法,在关注吞吐量和CPU资源敏感的场合,可以优先考虑Parallel Scavenge|Old的组合

猜你喜欢

转载自www.cnblogs.com/wslio/p/12055972.html
今日推荐