垃圾回收机制的工作原理

java的垃圾回收机制也可以称为"自适应的,分代的,停止-复制,标记-清扫"式垃圾回收器.

很多比较高效的垃圾回收机制的思想是:从创建的对象后的堆栈或者静态存储区开始,依次去遍历所有的对象引用,只要发现对象'死'了,就释放这个对象的存储空间.

而java虚拟机就是在这种方式下,采用的是一种自适应的垃圾回收机制.在说java垃圾回收机制之前,先介绍几种回收内存的方法:

停止--复制法:进行这种方法时,线必须要停止程序运行,这就表明它并不属于后台程序.暂停程序运行后,就会将存活的对象从当前堆复制到另一个堆,没有被复制的全部是垃圾.对象被复制到新堆后,或紧挨着排列,然后就可以继续的分配空间了.但是这种方式会降低效率.主要原因有两个:第一,必须要有两个堆,在两个堆来回复制时就会花费比实际多一倍的空间.第二,复制这些对象时会花费时间.因为但这些堆里面的对象很少死亡的话,产生的垃圾就会很少,这样来回复制就等于浪费时间.这种情况下.java虚拟机就会转到另一种模式:标记--清扫模式.

标记--清扫模式:同样是从堆栈或者静态存储区出发,遍历所有的引用找到所有存活的对象.每找到一个存活的对象就给对象一个标记,这个过程不会回收任何对象.当标记工作全部完成之后,清理工作才会开始.清理时,没有被标记的对象会被释放,并且不会放生任何的复制现象.但是清理之后的堆空间是不连续的.

(停止--复制和标记--清扫都是在内存数量变少之后才会停止程序去释放内存)

在java虚拟机中,分配内存都以较大"块"为单位.这样是方便拷贝对象.每个块中都有相应的代数,来记录这个块是否存活.通常块中的某处被引用代数就会增加.垃圾回收器会对每次回收动作之后的块进行着整理.

垃圾回收器工作原理:垃圾回收器会定期的进行清理工作:大型的对象不会被复制,但其代数会增加,内含小型的对象的那些块会被复制并整理.java虚拟机会对其进行监视,如果所有的对象都比较稳定,垃圾回收器效率降低,则自动转为"标记--清扫"模式,同样java虚拟机如果发现腿肿的对象出现很多不连续的的现象,则会变为"停止--复制"模式.这就是java虚拟机垃圾回收机制的"自适应"技术.这也是垃圾回收机制页脚开始的那个名称的原因.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值