2012年5月20日日曜日

javaの弱い参照

javaの弱い参照について説明する機会があったのだけど、実は本で読んだっきりで、自分で試したことがなかったので、説明もどうもマト外れ的になってしまいました。
そこで、ちょっと調べてみました。
どうも、リストにはない感じですね(すみません。)。マップにあるみたい、そして、こんな感じ。

 Map<String, String> map = new WeakHashMap<String, String>();
 String[] targets = new String[10];
 for (int i = 0; i < targets.length; i++) {
  targets[i] = new String(i + "");
  map.put(targets[i], "test" + i);
 }

 System.out.println(map.toString());

 // 普通の参照を消して、GC走らせると・・・
 targets[1] = null;
 System.gc();

 System.out.println(map.toString());

こうすると、こんな感じになるっす。

{8=test8, 9=test9, 4=test4, 5=test5, 6=test6, 7=test7, 0=test0, 1=test1, 2=test2, 3=test3}
{8=test8, 9=test9, 4=test4, 5=test5, 6=test6, 7=test7, 0=test0, 2=test2, 3=test3}
マップに参照されているのに、他の参照がなくなると、消えてしまうというわけだね。
ごめんね、Tさん、適当なこと言って・・・