美文网首页基础知识
Java WeakReference的理解与使用

Java WeakReference的理解与使用

作者: mrwrong1988 | 来源:发表于2016-01-15 12:00 被阅读1425次

    在Java里, 当一个对象o被创建时, 它被放在Heap里. 当GC运行的时候, 如果发现没有任何引用指向o, o就会被回收以腾出内存空间. 或者换句话说, 一个对象被回收, 必须满足两个条件: 1)没有任何引用指向它 2)GC被运行.


    导致内存泄漏例子:

    A a = new A();
    B b = new B(a);
    a = null;

    1356321982_8457.jpg

    A对象的引用a置空了,a不再指向对象A的地址,我们都知道当一个对象不再被其他对象引用的时候,是会被GC回收的,很显然及时a=null,那么A对象也是不可能被回收的,因为B依然依赖与A,在这个时候,造成了内存泄漏!

    使用WeakReference解决:

    public 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,使用时需判空

    相关文章

      网友评论

        本文标题:Java WeakReference的理解与使用

        本文链接:https://www.haomeiwen.com/subject/ytqhkttx.html