java在使用arraylist for each时如何避免内存泄漏?
private ArrayList<OutputInputPair> pairs = new ArrayList<OutputInputPair>();
public void process() {
while (!stopped) {
for (OutputInputPair pair : pairs) {
processCommandPairs(pair);
}
}
}
首先,当用户点击停止按钮时,stopped = true
所以,如果用户没有点击按钮,
始终执行processCommandPairs
方法
当停止按钮点击
@Override
public void stop() {
Log.d(TAG, "STOP memory leak");
pairs.clear();
pairs = null;
stopped = true;
}
我只有一个问题,如果用户不点击按钮,数组列表中发生内存泄漏是对的
如果没有,如何避免arraylist上的内存泄漏
# 1 楼答案
关于你的问题: “我只有一个问题,如果用户不点击按钮,数组列表中发生内存泄漏是否正确?”
答案是“不,不对”
但我知道这会发生在你的代码中。对于每个循环,基本上有三种情况(需要避免)会导致内存泄漏:
while(true){...}
)在这些情况下会引发内存泄漏,因为在运行内部类
hasNext()
、next()
或其他方法Itr
之前,将执行以下代码片段(您可以在ArrayList类中进行检查)由于这个代码段是在无限循环中被调用的,因此
Itr
的无限实例将被创建,并最终导致内存泄漏# 2 楼答案
重写活动的
onDestroy
方法,并显式地将stopped
设置为true,以便在活动关闭时退出while循环,ArrayList将可用于垃圾收集