【发布时间】:2013-07-21 17:41:33
【问题描述】:
我的应用中有“以下代码”:
...
new Thread(new Runnable(){
@Override
public void run(){
while(true){
...
firstArrayList.add(new CustomObject());
...
secondArrayList.add(new Integer(integer1));
secondArrayList.add(new Integer(integer2));
...
if(roundOverCondition){
firstArrayList.clear();
secondArrayList.clear();
Thread.sleep(3000);
}
}
}
}).start();
...
我在 Eclipse 中做了四个堆转储。
- 线程启动前
- 线程运行一段时间后; roundOverCondition 从来都不是真的,然而
- roundOverCondition 第一次为真之后(firstArrayList 的大小为 230)
- roundOverCondition 第二次为真后(firstArrayList 的大小为 200)
结果如下:
堆转储 2 显示堆中存在 Integer、CustomObject 和 java.lang.Object[] 的实例
堆转储 3 显示不再存在 Integer 和 CustomObject 的实例堆。 java.lang.Object[] 的所有实例仍然存在
堆转储 4 表明堆中存在更多 java.lang.Object[] 实例(没有 Integer 和 CustomObject 实例)
Integer 和 CustomObject 的实例数量的发展/行为符合预期。但是这个 java.lang.Object[] 实例是什么?为什么不收集垃圾?
谢谢和问候:)
【问题讨论】:
标签: android arraylist memory-leaks heap-memory