我的应用中有“以下代码”:
...
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中做了四次堆转储。
结果如下:
堆转储2显示堆中存在Integer,CustomObject和java.lang.Object []的实例
堆转储3表明不再存在Integer和CustomObject的实例堆。 java.lang.Object []的所有实例仍然存在
堆转储4显示堆中存在更多java.lang.Object []实例(没有Integer和CustomObject的实例)
Integer和CustomObject的实例数的开发/行为符合预期。但是这个java.lang.Object []实例是什么?为什么你不收垃圾?
Thx&问候:)
答案 0 :(得分:0)
ArrayLists由数组支持。您在堆转储中看到的Object[]
实例可能由ArrayList
创建,作为向列表添加项目的副作用。
咨询docs for ArrayList并尝试使用大小的构造函数(或ensureCapacity())来测试假设。