楼子湾

导航

 

标记-清除算法:先标记需要回收的对象,标记完成后,统一回收掉被标记的对象,也可以反过来,标记存活的对象,统一回收掉未被标记的对象。

标记-复制算法:将内存容量划分为大小相等的两块,每次只使用其中一块儿。当这一块内存用完,就将还存活的对象复制到另一块上面,然后把已用过的内存一次清理掉。

标记-整理算法:标记存活对象,标记完成后,让所有存活对象都向内存空间一端移动,然后清理掉边界以外的内存。  与标记-清除算法的本质差别是标记-整理算法是移动式的

移动和整理存活对象的缺点:如果移动存活对象,尤其是在老年代这种每次回收都有大量对象存活区域,移动存活对象并更新所有引用这些对象的地方将会是一种极为负重的操作且全程需要暂停用户应用程序

不移动和整存活对象的缺点:如果跟标记-清理算法那样不考虑移动和整理存活对象的话会产生大量内存碎片,需要依赖更为复杂的内存分配器和内存访问器来解决,如“分区空闲分配列表”

移动:内存回收更复杂

不移动:内存分配更复杂

Parallel Scavenge:关注吞吐量,基于标记-整理算法

CMS:关注延迟,基于标记-清除算法

垃圾收集的安全点位置:是否具有让程序长时间执行的特征,如 方法调用、循环跳转、异常跳转等

新生代收集器:均采用标记复制算法

serial: 可以和CMS、serial Old 搭配使用

paralNew: 可以和CMS 和 parallel Old搭配使用

Parallel Scavenge 可以和 serial Old 、Parallel Old搭配使用

老年代收集器:

CMS:标记-清除算法

serial Old:标记-整理算法

parallel Old:标记-整理算法

 

 

G1: 

posted on 2021-02-01 09:55  楼子湾  阅读(49)  评论(0)    收藏  举报