JAVA的JVM垃圾回收算法问题 本帖最后由 mweibiao 于 2012-10-27 17:24:20 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 正是因为这种情况,所以引用计数收集器不好,也因此Sun的JDK并没有采用这种方法实现GC。 http://topic.csdn.net/u/20121020/21/acbaa39a-2f80-4718-8f0b-95515f2e2bb5.html 我是这么理解的,说错轻拍~维护一个反向引用列表就行了abstract class Root{ private List<Object> incomingReferenceList = new ArrayList<Object>(); public void addIncomingReferenceObject(Object obj){ if(!incomingReferenceList.contains(obj)) incomingReferenceList.add(obj); } public int getReferencedCount(){ return incomingReferenceList.size(); }}class A extends Root{ private B b; public void setB(B b){ this.b = b; b.addIncomingReferenceObject(this); }}class B extends Root{ private A a; public void setA(A a){ this.a = a; a.addIncomingReferenceObject(this); }} 我记得没用引用计数的原因是循环引用的时候垃圾收集不能判断这个对象是否能直接或间接被GC_ROOT引用,而不是因为循环引用的次数不好计算吧。。 这个是不是每个虚拟机实现都是不一样的,这个java编程思想上有讲过 这种方法似乎没有用在任何JVM的实现上。因为要定位这样的交互自引用的对象组代价是很大的。怎么定位呢?简单的保存引用就是一种方法,与之前的引用做比较即可。环的判别算法应该可以应用在这上面。 求教 求教两个大数相除的算法! 菜鸟,求助Java的编译实现 初学者基础问题,我的ID就是立刻结贴的保障! java算法与数据结构 目录分隔符问题 帮帮忙,如何写图片到oracle库 for 循环集合,集合没用泛型为什么报错 Java 技术板块 基础类 关于“非典型性”倒分问题的管理方案 如何学习java的io库? 求助,关于超链接,谢谢各位! 如何用swing实现jtable的列合并
维护一个反向引用列表就行了abstract class Root{
private List<Object> incomingReferenceList = new ArrayList<Object>();
public void addIncomingReferenceObject(Object obj){
if(!incomingReferenceList.contains(obj))
incomingReferenceList.add(obj);
}
public int getReferencedCount(){
return incomingReferenceList.size();
}
}class A extends Root{
private B b;
public void setB(B b){
this.b = b;
b.addIncomingReferenceObject(this);
}
}class B extends Root{
private A a;
public void setA(A a){
this.a = a;
a.addIncomingReferenceObject(this);
}
}