浅析Java的垃圾回收机制(GC)和五种常用的垃圾回收算法

前言

本文主要写了博主关于垃圾回收机制和相关算法的理解,希望对大家有些帮助。

一、垃圾回收机制

作用:分配内存、确保引用、回收内存

GC回收的依据是对象如果没有任何引用,就可以被回收。

总结:
1.GC用于回收程序中不再使用的内存;
2.GC让开发人员从释放内存的复杂工作中解脱出来,提高了开发效率,减轻了工作量;
3.通过屏蔽了开发人员对内存的控制,来增加系统的安全性和稳定性。

二、五种常用的垃圾回收算法

2.1引用计数算法

引用计数算法是最简单的、效率最低的算法。
原理:
保存在JVM堆中的每个对象都有一个被引用的计数器。
当有一个变量去引用这个对象时,这个计数器就会+1;
当变量被释放引用或者断开这个引用的时候,计数器就会-1;
如果这个对象的引用计数器变为0,就代表这个对象可以被垃圾回收。
但是,特殊的情况:如果两个对象都彼此相互引用,就会形成一个循环,称为循环引用。使用计数器算法无法解决。

2.2跟踪回收算法

原理:
利用JVM维护的对象引用图,每个对象都彼此依赖和引用。
从根节点开始遍历对象的引用图,同时标记可以遍历到的对象。等遍历结束后,未被标记的对象就是不被使用的对象,可以进行回收。

2.3压缩回收算法

原理:
将JVM堆中活跃的对象放到一个集中区域,然后在堆的另一端留出一大块空闲的区域,这就相当于把堆中的碎片清理掉了。
缺点:对性能损失比较大。

2.4复制回收算法

原理:
把堆分为两个相同大小的区域,在任何时刻,只有其中一个区域被使用,直到这个区域被消耗完,此时垃圾回收器会终断程序的运行,把所有活动的对象复制到另外一个区域,在复制的过程中,这些对象是精密的挨在一起的,从而可以消除我们在内存中产生的碎片。
优点:我们垃圾回收的同时,也完成了对对象的重新布置和安排。因为对象都是紧密连接的,所以对象的访问效率和寻址效率都是非常高的,而且一次性解决内存碎片的问题。
缺点:每次执行算法,都需要终断程序的运行,降低了程序的执行效率。

2.5按代回收算法

按代回收算法是主流的回收算法,解决了复制回收算法的缺点。
原理:
主要原理是根据对象的生命周期长短来进行回收。绝大多数对象的生命周期很短,比如方法中声明的对象,方法结束,对象就结束了。
把堆分成两个或多个子堆,每个子堆都算一代,算法主要扫描年轻的和新创建的对象,再经过多次扫描,仍然存活的对象就移到高一级的堆里。高级别的堆扫描次数会降低,范围也会小,从而提高了回收的效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝皮蛋瘦肉粥的小饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值