强引用和弱引用

1.今天看了一个博客来讲ThreadLocal用到了弱引用,发现自己没有真正体会到弱引用和强引用之间的区别,因此自己基于目前对强引用和弱引用的理解,写了如下代码,希望社区的朋友能帮我解答一下
2.代码如下:
类A:

    import java.lang.ref.WeakReference;

public class A<T> extends WeakReference<T> {

public A(T referent) {

super(referent);

}

}

类B:

    public class B {

}

类C:

    import java.lang.ref.WeakReference;

public class C {

private B b = new B();

private WeakReference<B> a = new A<B>(b);

public WeakReference<B> getA() {

return a;

}

}

3.请问在上述代码中,类A与类B,类A与类C,类B与类C之间的引用关系分别是什么?

如果我调整类A的代码如下:

import java.lang.ref.WeakReference;

private B b;

public class A<T> extends WeakReference<T> {

public A(T referent) {

super(referent);

}

}

引用关系又有和变化?

回答:

执行gc运行下,就明了了

图片描述
图片描述

回答:

1.首先这边问的类A与类B,类A与类C,类B与类C是什么引用关系?
纠正一下,应该说引用是相对一个实例来说的是强引用还是弱引用的。
比如说

Object a=new Object()

上面我使用new创建了一个Object对象,使用new Object()创建的对象中 a->new OBject(),其为强引用模式

2.弱引用:其为在gc垃圾回收的时候会被回收

Object a=new Object()

WeakReference<Object> wf = new WeakReference<Object>(obj);

Object b=wf.get()

在这里获取的b为弱引用,由于采用了WeakReference创建出来,使用get()得到的b对象,当然有的时候由于被垃圾回收机制回收了该对象可能是null对象,此时候b为Objectd的弱引用,a为Object的强引用
当我在后面加一句话:a=null;时候该new Object()创建出来的对象本身由于强引用关系被释放了,导致其只有了弱引用关系了。
图片描述
也就是说:

1.在图中可以看出,new Objet()在a=null语句没有被执行的时候,该对象为强引用对象,不能被垃圾回收机制所回收!

2.当a=null执行之后,强引用关系结束后,只有弱引用关系了,该对象为弱引用对象了

以上是 强引用和弱引用 的全部内容, 来源链接: utcz.com/a/166150.html

回到顶部