Java-WeakReference的理解与使用
文章目录
在Java里, 当一个对象o被创建时, 它被放在Heap里. 当GC运行的时候, 如果发现没有任何引用指向o, o就会被回收以腾出内存空间. 或者换句话说, 一个对象被回收, 必须满足两个条件: 1)没有任何引用指向它 2)GC被运行.
##导致内存泄漏例子:
A a = new A();
B b = new B(a);
a = null;
A对象的引用a置空了,a不再指向对象A的地址,我们都知道当一个对象不再被其他对象引用的时候,是会被GC回收的,很显然及时a=null,那么A对象也是不可能被回收的,因为B依然依赖与A,在这个时候,造成了内存泄漏!
##使用WeakReference解决:12345678910111213141516public class B{ WeakReference<A> weakA; public B(A a) { WeakReference<A> weakA = new WeakReference<A>(a); } public A getA() { return weakA.get(); }}A a = new A();B b = new B(a);a = null;b.getA(); // 返回null
这样不会造成内存泄漏,其中b.getA()会返回null,使用时需判空