JVM垃圾回收算法及收集器

133 阅读2分钟

垃圾回收机制:

1.垃圾回收机制的算法:

(1)标记清除:标记需要删除的对象,后进行删除,会产生内存碎片

(2).复制算法:把内存分为两半,先用其中一块内存,然后同样标记需要删除的对象,复制存活的对象到另一半,然后把标记删除的那一半内存都删除

(3).标记整理:标记需要删除的对象,然后使存活的对象向一端移动,直接删除掉在端边界以外的内存

(4).分代收集算法:目前主流的回收算法,新生代用复制算法,老年代则可以使用标记删除或标记整理

2.垃圾回收器:

(1) Serial:串行收集器,单线程收集器,在垃圾回收线程工作时需要停止其他工作线程,”stop the world”

优点:简单高效

image.png

(2) ParNew: Serial收集器的多线程版本,收集算法与Serial一样,新生代用复制,老年代用标记整理

image.png

(3) Parallel Scavenge:类似于ParNew,CPU效率高,可以设置老年代串行并行处理模式

image.png

(4) Serial Old:串行模式的老年代版本,CMS收集器的后备方案

(5) Parallel Old:Parallel收集器的老年代版本,多线程和标记整理算法结合,在考虑CPU效率和吞吐量的情况下都可以考虑

(6) CMS收集器:并发收集器,实现垃圾回收线程与用户进程几乎同时进行的收集器,关注获取最短回收停顿时间的算法

image.png

a. 初始标记:暂停其他线程,标记与GCroot节点直连的对象

b.并发标记:GC线程与用户进程同时开启,以一个闭包结构记录可达对象

c. 重新标记:只有GC线程,重新标记在用户进程工作过程中对象的变动

d. 并发清理:开启用户进程,垃圾回收进程清理标记的对象

注:CMS算法使用的时标记-清除算法,会产生大量的内存碎片,优点为并发收集,低停顿

(7) G1收集器:针对配备多个处理器和大内存的机器,在保证低停顿的同时,保证其吞吐量,

 a.并发处理,分代收集(保留分代的概念),空间整合(整体上看属于标记-整理算法,局部上属于复制算法),可预测停顿(用户可以指定停顿时间)

 b.初始标记-->并发标记-->最终标记--> 筛选回收

 c.G1收集器在后台维护了一个优先列表,按照收集时间进行回收,优先选择回收价值最大的区域。