垃圾回收机制:
1.垃圾回收机制的算法:
(1)标记清除:标记需要删除的对象,后进行删除,会产生内存碎片
(2).复制算法:把内存分为两半,先用其中一块内存,然后同样标记需要删除的对象,复制存活的对象到另一半,然后把标记删除的那一半内存都删除
(3).标记整理:标记需要删除的对象,然后使存活的对象向一端移动,直接删除掉在端边界以外的内存
(4).分代收集算法:目前主流的回收算法,新生代用复制算法,老年代则可以使用标记删除或标记整理
2.垃圾回收器:
(1) Serial:串行收集器,单线程收集器,在垃圾回收线程工作时需要停止其他工作线程,”stop the world”
优点:简单高效
(2) ParNew: Serial收集器的多线程版本,收集算法与Serial一样,新生代用复制,老年代用标记整理
(3) Parallel Scavenge:类似于ParNew,CPU效率高,可以设置老年代串行并行处理模式
(4) Serial Old:串行模式的老年代版本,CMS收集器的后备方案
(5) Parallel Old:Parallel收集器的老年代版本,多线程和标记整理算法结合,在考虑CPU效率和吞吐量的情况下都可以考虑
(6) CMS收集器:并发收集器,实现垃圾回收线程与用户进程几乎同时进行的收集器,关注获取最短回收停顿时间的算法
a. 初始标记:暂停其他线程,标记与GCroot节点直连的对象
b.并发标记:GC线程与用户进程同时开启,以一个闭包结构记录可达对象
c. 重新标记:只有GC线程,重新标记在用户进程工作过程中对象的变动
d. 并发清理:开启用户进程,垃圾回收进程清理标记的对象
注:CMS算法使用的时标记-清除算法,会产生大量的内存碎片,优点为并发收集,低停顿
(7) G1收集器:针对配备多个处理器和大内存的机器,在保证低停顿的同时,保证其吞吐量,
a.并发处理,分代收集(保留分代的概念),空间整合(整体上看属于标记-整理算法,局部上属于复制算法),可预测停顿(用户可以指定停顿时间)
b.初始标记-->并发标记-->最终标记--> 筛选回收
c.G1收集器在后台维护了一个优先列表,按照收集时间进行回收,优先选择回收价值最大的区域。