2 tmz794600991 TMZ794600991 于 2014.12.06 13:45 提问

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;

2个回答

fiveone
fiveone   2014.12.06 14:11

继续执行,内存涨到一定程度就不会涨了.
java进程,启动时候有内存分配参数,

eagleyan
eagleyan   Rxr 2014.12.06 14:24

你可以试图调用System.gc(),但是这并不能保证gc会真的开始,当你的内存还有空间的时候,jvm并不会主动的清理内存。如果这些对象真的是很短时间就不用了,你可以通过jvm参数调整新生代大小 -X:MaxNewSzie=100M,但是貌似你这些对象很大,他们有可能直接就进到老年代了,这个时候你倒是要
调大新生代大小。这些做法都要基于你的观察。没有万能的解决方案


Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!