弱参照について読んでいます。
私はここから勉強するためにコードを使用しています。とても簡単です。
private void doFunction() throws InterruptedException {
Map<Integer, String> map = new HashMap<Integer, String>();
myMap = new WeakReference<Map<Integer, String>>(map);
map = null;
int i = 0;
while (true) {
if (myMap != null && myMap.get() != null) {
myMap.get().put(i++, "test" + i);
System.out.println("im still working!!!!");
}
else {
System.out.println("*******im free at:"+i+"*******");
Thread.sleep(5000);
if(myMap != null){
System.out.println("*******myMap is not null*******");
}
}
}
小さなヒープサイズやを介して任意のサイズを要求しませんでし–Xms and –Xmx
たが、のときにキャッシュから削除された値を確認できましたi == 15312
。
したがって、GC15312
内のオブジェクトがMap
エントリの削除を開始した後。
私の質問:メモリのあるものには15312
低すぎませんか?参照が削除され始める前に、はるかに高い値を期待していました。
私はこれについて間違っていますか?オブジェクトが削除され始めるポイントをどのように評価できますか? 32 bit machine
4 GB