问题描述
- java手动回收内存问题
-
一个javaweb项目上线需要导入2W条数据,我先将数据转为list集合,再循环集合插入到数据库中,每次循环后我将对象设置为null,且在方法体结尾手动清空了集合,可使用jconsole.exe监控项目,内存涨了300M,且观察N久都没下降,
清空对象代码方式如下:
listProducts.clear();
listProducts = null;
mapList.clear();
mapList=null;
attributes.clear();
attributes = null;
unitsmap.clear();
unitsmap = null;
tempUnitsmap.clear();
tempUnitsmap = null;
解决方案
继续执行,内存涨到一定程度就不会涨了.
java进程,启动时候有内存分配参数,
解决方案二:
你可以试图调用System.gc(),但是这并不能保证gc会真的开始,当你的内存还有空间的时候,jvm并不会主动的清理内存。如果这些对象真的是很短时间就不用了,你可以通过jvm参数调整新生代大小 -X:MaxNewSzie=100M,但是貌似你这些对象很大,他们有可能直接就进到老年代了,这个时候你倒是要
调大新生代大小。这些做法都要基于你的观察。没有万能的解决方案
时间: 2024-12-04 00:47:46