收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现
并没有一种垃圾收集器能解决所有问题,只能根据项目实际需要,选择适合的垃圾收集器。
串行收集器,单线程,会STW。新生代采用复制算法,老年代采用标记整理算法
特点:简单而高效(与其他单线程收集器相比)
Serial Old收集器是Serial收集器的老年代版本
并行收集器,其实就是Serial收集器的多线程版本,Parallel Scavenge 关注点是吞吐量,CMS等垃圾收集器的关注点更多的是用户的体验,卡顿的时间。
新生代采用复制算法,老年代采用标记整理算法
ParNew收集器(-XX:+UseParNewGC)
ParNew收集器与Parallel 收集器类似,主要区别在于ParNew 可与CMS收集器配合使用
新生代采用复制算法,老年代采用标记整理算法
CMS收集器(-XX:+UseConcMarkSweepGC(old))
CMS收集器是一种以获取最短回收卡顿时间为目标的收集器,它非常符合在用户体验的应用上使用,它是HotSpot虚拟机第一款真正意义上的并发收集器,它第一次实现了让垃圾收集器和用户线程(基本上)同时工作。 采用标记清除算法实现
分为4个步骤: 初始标记
并发标记
重新标记
并发重置
优点:并发收集,低卡顿
缺点:对cpu资源敏感 无法处理浮动垃圾
底层采用标记清除算法,碎片化,当然可以通过参数配置,进行整理
三色标记 黑色 灰色 白色