JAVA JVM常见的垃圾回收算法

目录

1、标记-清除算法

2、标记-复制算法

3、标记-整理算法

4、分代收集算法


1、标记-清除算法

标记无用对象,然后进行清除回收。 标记-清除算法(Mark-Sweep)是一种常见的基础垃圾收集算法,它将垃圾收 集分为两个阶段: 标记阶段:标记出可以回收的对象。

清除阶段:回收被标记的对象所占用的空间。 标记-清除算法之所以是基础的,是因为后面讲到的垃圾收集算法都是在此算法 的基础上进行改进的。 优点:实现简单,不需要对象进行移动。 缺点:标记、清除过程效率低,产生大量不连续的内存碎片,提高了垃圾回收的 频率。

标记-清除算法的执行的过程如下图所示

2、标记-复制算法

为了解决标记-清除算法的效率不高的问题,产生了复制算法。它把内存空间划 为两个相等的区域,每次只使用其中一个区域。垃圾收集时,遍历当前使用的区域,把存活对象复制到另外一个区域中,最后将当前使用的区域的可回收的对象进行回收。 优点:按顺序分配内存即可,实现简单、运行高效,不用考虑内存碎片。 缺点:可用的内存大小缩小为原来的一半,对象存活率高时会频繁进行复制。

复制算法的执行过程如下图所示

3、标记-整理算法

在新生代中可以使用复制算法,但是在老年代就不能选择复制算法了,因为老年代的对象存活率会较高,这样会有较多的复制操作,导致效率变低。标记-清除 算法可以应用在老年代中,但是它效率不高,在内存回收后容易产生大量内存碎片。因此就出现了一种标记-整理算法(Mark-Compact)算法,与标记-整理 算法不同的是,在标记可回收的对象后将所有存活的对象压缩到内存的一端,使 他们紧凑的排列在一起,然后对端边界以外的内存进行回收。回收后,已用和未 用的内存都各自一边。 优点:解决了标记-清理算法存在的内存碎片问题。 缺点:仍需要进行局部对象移动,一定程度上降低了效率。

标记-整理算法的执行过程如下图所示

4、分代收集算法

当前商业虚拟机都采用分代收集的垃圾收集算法。分代收集算法,顾名思义是根 据对象的存活周期将内存划分为几块。一般包括年轻代、老年代和永久代

如 图所示

下一篇文章将细说分代模型垃圾回收算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值