2
尽管使用了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 …