android - java - 带有ArrayList的WeakReferences?

cod*_*ewb 10 java android garbage-collection weak-references arraylist

我知道WeakReference,如果我做了WeakReference一些东西,除非直接引用它,它将是下一个GC循环收集的垃圾.我的问题是,如果我做出ArrayListWeakReferenceS'

例如:

ArrayList<WeakReference<String>> exArrayList;
exArrayList = new ArrayList<WeakReference<String>>();
exArrayList.add(new WeakReference<String>("Hello"));
Run Code Online (Sandbox Code Playgroud)

我现在可以访问数据了exArrayList.get(0).get().

我的问题变成了:这是WeakReference数据,exArrayList.get(0)下一个GC循环中的数据是否会被GC进行?(即使我没有另外直接引用它)或者这个特定的参考是否会一直存在直到arraylist被清空?(例如:) exArrayList.clear();.

如果这是重复,我没有在谷歌中找到我的关键字.

Evg*_*eev 24

  1. exArrayList.add(new WeakReference<String>("Hello"));是一个不好的例子,因为String文字永远不会被GC编辑

  2. 如果它是例如exArrayList.add(new WeakReference<Object>(new Object()));然后在GC之后该对象将被GC编辑,但exArrayList.get(0)仍然会返回WeakReference,但是exArrayList.get(0).get()会返回null


SJu*_*n76 7

数据exArrayList.get(0)WeakReference.它本身不是一个弱引用,因此不会被收集......

但是引用的对象exArrayList.get(0)被弱引用,因此它可能在任何时候被GCed(当然,这要求对该对象没有引用).

所以

data.get(0)不会成为null,但data.get(0).get()可能成为.

换句话说,列表不引用弱引用对象而是引用弱引用本身.