如:
Map a =new HashMap();
Map a1=new HashMap();
a1.put(...);Map a2=new HashMap();
a2.put(...);a.put("a1",a1);
a.put("a2",a2);现在令a.clear();a=null;
理论上将a1,a2都应该可以被GC回收吧?
但是我的程序跑了长时间后就OUTOFMEMORY,总不见空间被释放. 实际上我的所有Map都是在一个方法内的局部变量,我认为就算我不clear应该都没问题,怎么感觉就是释放不调呢?有没XD遇到过一样的情况?

解决方案 »

  1.   

    clear又不是C++的delete....理解错误了
    只是内容清空,不是内存清空.
    内存的释放不是你决定的,是垃圾回收线程后台执行的
      

  2.   

    GC底层实现是比较复杂的。由于引入GC这个机制,所以不能人为的析构。我了解的内存释放一个情况就是当内存紧张的时候GC会清理有标记的对象,释放资源。如果因为你这个资源打了标记没释放引起outofmemory,说实话,没遇到过。
      

  3.   

    你的HashMap有没有用在线程上面,如果是用在线程上面,我建议你用HashTable,至于什么原因我也不清楚,
    你试试显示调用垃圾回收看看,释放你的HashMap