WeakHashMapを使用しているにもかかわらずOutOfMemoryException
を呼び出さない場合System.gc()、システムはOutOfMemoryExceptionをスローします。なぜSystem.gc()明示的に呼び出す必要があるのかわかりません。JVMはgc()それ自体を呼び出す必要がありますよね?お知らせ下さい。 以下は私のテストコードです: public static void main(String[] args) throws InterruptedException { WeakHashMap<String, int[]> hm = new WeakHashMap<>(); int i = 0; while(true) { Thread.sleep(1000); i++; String key = new String(new Integer(i).toString()); System.out.println(String.format("add new element %d", i)); hm.put(key, new int[1024 * 10000]); key = null; //System.gc(); } } 以下のように追加-XX:+PrintGCDetailsして、GC情報を印刷します。ご覧のとおり、実際には、JVMは完全なGC実行を試みますが失敗します。私はまだその理由を知りません。System.gc();行をコメント解除すると、結果がポジティブになるのは非常に奇妙です。 add new element …