アプリに「次のコード」があります。
...
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で4つのヒープダンプを行いました。
- スレッドが開始される前に
- スレッドがしばらく実行された後。roundOverCondition は真ではありませんでしたが、まだ
- roundOverCondition が初めて true になった直後 (firstArrayList のサイズは 230)
- 2 回目に roundOverCondition が true になった直後 (firstArrayList のサイズは 200)
それが結果です:
heap dump 2 は、Integer、CustomObject、および java.lang.Object[] のインスタンスがヒープに存在することを示しています
ヒープ ダンプ 3 は、Integer と CustomObject のインスタンスがヒープに存在しないことを示しています。java.lang.Object[] のすべてのインスタンスがまだ存在します
ヒープ ダンプ 4 は、さらに多くの java.lang.Object[] のインスタンスがヒープに存在することを示しています (Integer および CustomObject のインスタンスはありません)。
Integer と CustomObject のインスタンス数の展開/動作は期待どおりです。しかし、この java.lang.Object[] インスタンスは何ですか? そして、なぜあなたはガベージコレクションを取得しないのですか?
Thx&よろしく:)