WeakHashMapのエントリの削除を、そのキーのいずれかへのアクティブな参照がない場合、どのようにモデル化できますか?私は次のコードを持っている:WeakHashMapは廃止されたエントリを削除しません
WeakHashMap<Integer, String> weakMap = new WeakHashMap<Integer, String>();
Integer st1 = 5;
Integer st2 = 6;
String val = "BB";
weakMap.put(st1, "AA");
weakMap.put(st2, val);
st1 = 10;
//st1 = null;
//System.gc();
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
出力は
6 BB
5 AA
常にあるがしかし、私は、それはまだ同じ出力を生成するだけ6 BB
私がコメントしdecomment場合でもラインを得ることを期待します。 WeakHashMap
のキーにこのweakHashMap
以外のどこかにアクティブな参照がない場合は、指定したキーのエントリを削除する必要があります。私は正しい?いいえ、正しい解決策を提案してください。
System.gcはあなたが電話するときにgcをすることを保証しません。 – kosa
ColinDが言ったようにコードを変更しました。私が作った試みでは(System.gc()で)動作します。それはすべての試みにおいて私が単に幸運であり、gcであることを意味するのでしょうか? – maks
@maks:いくつかのJVMでは信頼できるが、他のJVMではそうすることはできないかもしれないし、いくつかのフラグに依存するかもしれない(私は特にそうではない)。しかし、それは必須ではありませんので、あなたが頼りにするべきではありません。 – ColinD