ReferenceMapを使ってデータをメモリにキャッシュ
先日「LRUMapを使ってメモリにキャッシュ」というエントリーを書きましたが、これだと他に参照が存在している場合にもmapからの参照が削除されてしまう場合があります。微妙に不便。
そんな訳で「org.apache.commons.collections.map.ReferenceMap」を使いましょう。
Integer test1 = new Integer(200);
Integer test2 = new Integer(300);
Integer test3 = new Integer(400);
ReferenceMap map = new ReferenceMap(
ReferenceMap.HARD,
ReferenceMap.WEAK);
map.put("test1", test1);
map.put("test2", test2);
map.put("test3", test3);
System.gc();
System.out.println("test1: " + map.get("test1"));
test1 = new Integer(600);
System.gc();
System.out.println("test1: " + map.get("test1"));
んで下が出力。
test1: 200 test1: null
おー、ちゃんとGCの際には参照が削除されてる。
んで、メモリに余裕がある場合にGCの対象とされたくなかった場合は、
ReferenceMap map = new ReferenceMap(
ReferenceMap.HARD,
ReferenceMap.SOFT);
とすればよい。