java中的垃圾回收算法

java中的垃圾回收算法

​ 今天来讲讲java中的垃圾回收机制,要了解垃圾回收机制,我们就要先了解java堆,它的实现是什么。

java堆的实现:

​ 在java中堆的实现像一个传送带,每分配一个新的对象,它就向前移动一格。这就意味着对象存储空间的分配非常的快,java的“堆指针”只是简单的移动到尚未分配的区域。

​ 但是java堆未必完全像上面将的那样工作,因为如果真的是那样的话,一定会导致频繁的内存页面调度——将其移进移出硬盘,页面调度会影响性能,最终在创建足够多的对象之后,内存耗尽。因为java中有垃圾回收器,垃圾回收器工作的时候,一边回收空间,一边把堆中的对象紧凑排列。通过垃圾回收对对象的重新排列,实现一种高速的,有无限空间可以分配的堆模型。

java垃圾回收算法:

1.引用计数法

​ 描述:每一个对象都有一个引用计数器,当有引用连接到对象的时候,引用计数加一,当引用离开作用域或者被置为null的时候,引用计数减一。

虽然管理引用计数的开销并不大,但是这项开销在整一个程序的生命周期中持续发生。垃圾回收器会在含有全部对象的列表上面遍历,当发现某个对象的引用计数为0的时候,就释放这个对象的空间。但是这种方法有一个缺陷:如果某个对象在循环中被引用,可能会出现“对象应该被回收,但是引用计数不为0的情况”。引用计数法通常用来说明垃圾回收的工作方式,但是好像没有哪一个java虚拟机是采用这种方式实现垃圾回收的。

2.自适应的垃圾回收技术:

一种更快的模型:对于任何“活”的对象,一定能够最终追溯到其存活在堆栈或静态存储空间的引用。由此,如果从堆栈和静态存储区开始,遍历所有的引用,就能找到所有“活”的对象。对于每发现一个引用,必须追踪到它引用的对象,然后是此对象的所有引用,如此反复进行,直到“根源于堆栈和静态存储区中所有的引用”所形成的网络全被访问为止。

在这种方式下,java虚拟机将采用一种自适应的垃圾回收技术。

自适应主要有两种方式:

1)停止—复制法&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值