日期:2014-05-20  浏览次数:22926 次

HashMap内存释放问题,大家来看看~
如:
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遇到过一样的情况?


------解决方案--------------------
clear又不是C++的delete....理解错误了
只是内容清空,不是内存清空.
内存的释放不是你决定的,是垃圾回收线程后台执行的
------解决方案--------------------
GC底层实现是比较复杂的。由于引入GC这个机制,所以不能人为的析构。我了解的内存释放一个情况就是当内存紧张的时候GC会清理有标记的对象,释放资源。如果因为你这个资源打了标记没释放引起outofmemory,说实话,没遇到过。
------解决方案--------------------
你的HashMap有没有用在线程上面,如果是用在线程上面,我建议你用HashTable,至于什么原因我也不清楚,
你试试显示调用垃圾回收看看,释放你的HashMap
------解决方案--------------------
奇怪真奇怪,GC干吗去了~~~~~~~~~~