0

アプリに「次のコード」があります。

...
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つのヒープダンプを行いました。

  1. スレッドが開始される前に
  2. スレッドがしばらく実行された後。roundOverCondition は真ではありませんでしたが、まだ
  3. roundOverCondition が初めて true になった直後 (firstArrayList のサイズは 230)
  4. 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&よろしく:)

4

1 に答える 1