在我的 Application
类中有一个arraylist,还有一个 Activity
,在初始化此arraylist之后,我现在也创建了一个arraylist。
现在,我正在考虑,当此活动将获得destroyed
(用户按下按钮)时,我认为Activity类ArrayList内存必须发布,但是因为App class class arraylist也引用了同一内存,所以现在可以在那里成为Memory Leak
或者不是?
,如果没有Memory Leak
,请告诉我当我将活动/片段上下文存储在静态变量中时,会发生Memory Leak
,但是为什么不在这里。
应用程序类代码
public class App extends MultiDexApplication {
ArrayList<String> contacts;
}
活动类代码
ArrayList<String> arr = new ArrayList<String>();
arr.add("123");
((App) getApplication()).contacts = arr; // Here I am refrencing arr to contacts;
当此活动将被破坏时(用户按下按钮),所以我认为活动类ArrayList内存必须发布
在Java&mdash;和其他语言使用垃圾收集&mdash;最接近"发布"的东西是"没有更多指向它的参考"。
在这种情况下,ArrayList
仍然具有指向它的引用:Application
中的contacts
字段。因此,ArrayList
不能收集垃圾。
现在是否存在内存泄漏?
ArrayList<String>
无法造成垃圾收集,因为您将始终对其进行引用。
但是,我们倾向于保留"泄漏"一词的记忆使用情况的情况:
- 您不打算无限期保留参考
- 您一直在列表中添加更多对象,因此您的内存使用情况无限期增长
- 等。
这是否完全取决于这是否是预期的行为(例如,您将此ArrayList<String>
用作从应用程序外部获得的数据缓存,例如来自磁盘或网络)。