JVM中的垃圾回收算法(简介)

垃圾收集针对的是堆内存中的对象

 

最简单的是——引用计数(Reference Counting)

对每个对象保存一个引用计数,当计数为零时边删除这个对象。缺点是新对象生成需要更新相关计数,且无法删除循环引用。

 

常用垃圾收集算法:

 

标记——清除(Mark—Sweep)算法

首先标记出存活的对象,没有被标记出来的便被收集

第一阶段:从引用根节点开始标记所有被引用的对象

第二阶段:遍历整个堆,把未标记的对象清除

缺点:此算法需要暂停整个应用,同时会产生内存碎片

 

复制(Copying)算法

讲内存分为两部分,收集时,存活对象从一部分移动到另一部分,如此往复

第一阶段:把内存空间分为两个相等的区域,每次只用其中一个区域

第二阶段:垃圾回收时,遍历当前使用区域,把正在使用的对象复制到另一个区域

优点:只处理正在使用中的对象,复制成本比较小,同时还能进行相应的内存整理

缺点:需要两倍的内存空间

 

标记——整理(Mark—Compact)算法

结合"标记—清除"和"复制"算法的优点

第一阶段:从引用根节点开始标记所有被引用的对象

第二阶段:遍历整个堆,清除未标记的对象并且把存活对象"压缩"到堆的其中一块,按顺序排放

优点:避免了产生内存碎片,也避免了使用更多的内存空间

 

分代收集(Generational Collecting)算法

基于对对象生命周期分析后得到的垃圾回收算法,它把对象分为年轻代、老年代、持久代。对不同生命周期的对象使用不同的算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值