您的位置:首页 > 其它

GC回收相互引用对象

2017-10-27 15:15 225 查看
java中有垃圾回收机制,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况,当对象不再被引用的时候,,对象将自动被垃圾回收器从内存中清除掉。

案例:两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的(可达性分析算法:通过GC roots的对象作为起点,从这个节点向下搜索,搜索所走过的路径称为引用链,当一个GC对象没有任何引用链相连的时候,则证明此对像是不可用的)。

java代码实现两个对象的相互引用案例一:

public class Dd {
public static void main(String[] args){
Dd d=new Dd();//实例化外部类
ff f=d.new ff();//实例化内部类需要外部类的引用
ff f1=d.new ff();
f.setd(f1);
f.setd(f);
}
privateclass ff {
Byte[] b=new Byte[100];
ff f3=null;
public void setd(ff f2){
f3=f2;
}
}
}


内存分析:堆栈是为了让程序员能够更好的理解java对象的空间分配,真实的内存要复杂更多



java代码实现两个对象的相互引用案例二:

public class TestGC {
private Object object=null;
public static void main(String[] args){
TestGC t=new TestGC();
TestGC t1=new TestGC();
t.object=t1;
t1.object=t;
t=null;
t1=null;
System.gc();
}
}
内存分析:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: