强引用和弱引用
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