了解弱引用

时间:2014-11-12 21:44:36

标签: java android memory-leaks weak-references

考虑我有一个与此类似的类结构

class Outer extends Activity {

    Map<String, String> outerMap;

    public Map getSampleMap() {
        return sampleMap;
    }

    static class Inner {
        Map<String, String> innerMap;

        Inner(Outer outer) {
            /* Weak ref to outer class object */
            WeakReference weakref = new WeakReference<Outer>(outer);
            /* reference to the outer map using the weak ref */
            innerMap = weakref.get().getSampleMap();
        }

        void doSomething() {
            // Operations on the innerMap
        }

    }
}

现在在上面的代码结构中

  1. innerMap是否对outerMap有强引用?
  2. 如果我要在回调中传递innerMap,那么它比Outer更长 类(可能是配置更改)会泄漏吗?
  3. 外面的班级 对象是GC&#39; ed?
  4. 有人能指出一个很好的参考资料来源。

1 个答案:

答案 0 :(得分:0)

  1. 否。 innerMap是对outer.outerMap引用的同一对象的引用。通过对outer的弱引用来初始化它不会改变它。
  2. 否。 innerMap引用的对象在没有任何实时,强有力的引用时将有资格获得GC。它曾经被某个类的实例变量引用,后来一直是GC&#39; ed没有区别。
  3. outer引用的同一对象的另一个引用outer.outerMap之外的存在本身并不会阻止outer引用的对象本身为GC

    至于资源,你可以试试