深入理解Java虚拟机(5)——垃圾收集算法

7 篇文章 0 订阅

一.垃圾收集算法(简单介绍思想和发展过程)

1.标记—清除 算法

    首先标记处所有需要回收的对象,在标记完成后统一回收所有被标记的对象。

不足之处:

(1)效率:标记和清除两个过程效率不高

(2)空间问题:标记清除后会产生大量不连续的内存碎片,空间碎片太多导致以后程序运行时需要分配较大的对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

2.复制算法

将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

不足之处:牺牲一半内存。

优化:新生代中的对象百分之九十八是朝生夕死,不需要按照1:1的比例来划分内存空间,而是将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中的一块Survivor空间。当回收时,将Eden和Survivor中还存活的对象一次性地复制到另外一块Survivor空间上,最后清理Eden和刚才用过的Survivor空间,HotSpot虚拟机默认Eden和Survivor的大小比例是8:1,只有百分之十的内存会被浪费。

3.标记—整理算法

  标记完之后让所有存活的对象都向一端移动,然后直接清理掉边界以外的内存。

4.分代收集算法

  只是根据对象存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代。

二.HotSpot的算法实现

1.枚举根节点

    可达性分析从GC Roots节点找引用链,作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文中。

     在HotStop的实现中,是使用一组称为OopMap的数据结构来直接得知哪些地方存放着对象引用。

2.安全点

3.安全区域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值