分类
serial收集器:采用复制算法,新生代的单线程收集器,标记和清理都是单线程,简单高效
parNew收集器:采用复制算法,新生代的多线程收集器,在多核CPU的环境下比serial更加高效
parallelScavenge收集器:复制算法,并行收集器,高吞吐量
serial Old收集器:标记整理算法,老年代单线程收集器,是serial收集器的老年代版本
parallel收集器:标记整理算法,老年代并行收集器,吞吐量优先,是parallelScavenge的老年代版本
CMS(Concurrent Mark Sweep)收集器:标记清除算法,老年代并行收集器,高效低停顿,牺牲了一定的吞吐量,对服务器响应速度高的服务器适合使用这种算法。可使用参数-XX:+UseConcurrentMarkSweepGC指定。将产生较多内存碎片,当剩余内存不足时,会使用serial-old进行清除
G1(Garbage First)收集器:标记整理算法,java堆并行收集器,不会产生内存碎片,并可作用于整个新生代、老年代。
工作过程
管理的内存区域分为新生代、老年代,默认占比为1/3,2/3
新生代使用复制算法,有三个分区:Eden、To-Survivor、From-Survivor,默认占比为8:1:1
新生代执行流程:1、把Eden、From-Survivor存活对象放入To-Survivor区并清空原区域;2、From-Survivor、To-Suivivor分区交换,每次移动都存活的对象年龄+1,达到默认15时进入老年代
大对象直接进入老年代
老年代占用空间达到某个值时,将会触发FULL-GC,采用标记整理算法
以上过程的反复,构成了整个分代垃圾的回收执行流程