垃圾回收器的工作机制

来源:互联网 发布:windows群集有什么用 编辑:程序博客网 时间:2024/06/06 12:40

1.引用计数器

每一个对象都会用一小块存储空间来存放引用计数器,当对象被引用时,计数器加1,当对象失去引用或对象引用被置为null时减1,当垃圾回收器检测到对象的引用计数器为0时

垃圾回收器释放资源,大家也许会想到资源释放后那空间是不连续的,所以垃圾回收器还有整理空间的功能,让空间连续

ps:这里会有一个缺陷,当几个对象引用形成一个循环时,这些对象本来应该被释放的,但由于他的引用计数器不为0,所以垃圾回收器不会释放对象的内存资源

2.停止-复制

垃圾回收器回重堆栈和静态存储区开始检查所有引用,当对象是可到达时,就会把可到达的所有对象复制到另外一块存储空间上,而不可到达的便成为垃圾,这种机制的效率是非常低的,因为他会先停止程序,然后执行复制操作,复制的同时还必修改所有引用.完成复制后,空间是连续的,所以就不需要整理。当垃圾(不可到达对象)很少时,这种机制是非常不划算的,所以有了下面的方法

3.标记-清扫

速度想当面慢,但垃圾很少时相对于停止-复制是相当快的

从堆栈和静态存储区开始,遍历所有引用,找出存活(可到达)对象并标记,当标记完后开始清理任务,清理后空间是不连续的,所以垃圾回收器还必须整理

如果只用一种机制,是不灵活的

所以有了第4种机制

4自适应

对象很稳定时用标记-清扫


原创粉丝点击