マップを格納する 1 つのクラスと、そのクラスのメソッドを呼び出すボタンを含むテスト アプリケーションがあります。
Map<Object, Object> weakMap = new WeakHashMap<Object, Object>();
ボタンはこれを行います:
public void fillWeakHashMap(int size) {
List<String> createObjects = (List<String>) createObject(size);
for (Object ob : createObjects) {
weakMap.put(ob, ob);
}
}
したがって、マップを持つメインクラスは生きていますが、そこに配置したオブジェクトは別のメソッドで作成されます。メソッドを終了した後、マップ内のキー/オブジェクトはGCによってクリアされるWeakHashMap
と思いました。fillWeakHashMap
VisualVM->VisualGC を開き、Monitor->PerformGC を 10 回クリックしましたが、GC がこれらのオブジェクトをクリアしていないことを意味する古い領域がほぼいっぱいです。それで、私は何を間違っていますか?