java垃圾回收算法之-引用计数器
2016-05-23 13:55
281 查看
引用计数器算法算是一种古老的java垃圾回收算法,目前很多版本的java已经废弃掉这种算法了。不过多了解历史解决方案也是很有好处的,通过总结它的优缺点,再与新算法比较,可以帮助更好的理解新算法。
无需等到内存不够的时候,才开始回收,运行时根据对象的计数器是否为0,就可以直接回收。
应用无需挂起
在垃圾回收过程中,应用无需挂起。如果申请内存时,内存不足,则立刻报outofmember 错误。
区域性
更新对象的计数器时,只是影响到该对象,不会扫描全部对象
虽然a和b都为null,但是由于a和b存在循环引用,这样a和b永远都不会被回收。
2、浪费cpu,即使内存够用,仍然在运行时进行计数器的统计
引用计数器算法描述
定义:给每个对象分配一个计算器,当有引用指向这个对象时,计数器加1,当指向该对象的引用失效时,计数器减一。最后如果该对象的计算器为0时,java垃圾回收器会认为该对象是可回收的。优点
实时性无需等到内存不够的时候,才开始回收,运行时根据对象的计数器是否为0,就可以直接回收。
应用无需挂起
在垃圾回收过程中,应用无需挂起。如果申请内存时,内存不足,则立刻报outofmember 错误。
区域性
更新对象的计数器时,只是影响到该对象,不会扫描全部对象
缺点
1、每次对象被引用时,都需要去更新计数器,有一点时间开销。另外无法解决循环引用问题。例如:class TestA{ public TestB b; } class TestB{ public TestA a; } public class Main{ public static void main(String[] args){ A a = new A(); B b = new B(); a.b=b; b.a=a; a = null; b = null; } }
虽然a和b都为null,但是由于a和b存在循环引用,这样a和b永远都不会被回收。
2、浪费cpu,即使内存够用,仍然在运行时进行计数器的统计
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树