垃圾收集算法:
标记清除:标记和清除的效率都不高、产生碎片;
复制:代价高只能用到一半内存(新生代中使用,Eden:Survicor:Survicor=8:1:1);
标记-整理:老年代使用;

垃圾收集器:
Serial(client模式下的默认新生代收集器):
缺点:单线程且会停止所有工作线程;
优点:简单高效;
ParNew(Serial的多线程版本,server模式下的默认新生代收集器):
缺点:在单核场景下性能不如Serial;
优点:能和CMS收集器配合工作;
Parallel Scavenge(类似ParNew,关注吞吐量):
缺点:不能和CMS收集器配合工作;
优点:可以设置停顿间隙以及吞吐量、有自适应调节策略;
CMS(关注用户线程停顿时间)
Serial Old:Serial的老年代版本,使用标记整理算法,主要client模式下使用,并且可作为CMS的后备方案,在并发收集发送Concurrent Mod Failure的时候使用。
Parallel Old:JDK1.6才开始提供,配合Parallel Scavenge达到吞吐量优先的效果。
CMS:一种以最短回收停顿时间为目标的收集器,使用标记清除算法。分初始标记、并发标记、重新标记、并发清除四个阶段,其中第1和3需要停顿用户响应;
优点:并发收集、低停顿;
缺点:对CPU资源非常敏感、无法处理浮动垃圾可能出现Concurrent Mod Failure导致Full GC、产生内存碎片;
G1收集器:JDK1.6.14以后才提供,比CMS有两个明显改进:基于“标识-整理”算法、精确控制停顿。
内存分配和回收策略:对象优先在Eden区分配,大对象和长期存活的对象直接进去老年代;

JVM垃圾收集_第1张图片