代码如下,for循环大约有100W次,如果不释放会造成内存溢出,我在每个qm对象处理完之后置为NULL,是否有用,或者各位大神有什么好方法,多谢。
QmSapTextBean qm ;
for (int i = 0; i < numrows; ++i) {
num++;
table_detail.setRow(i);
qm = JcoRecordConverter.convertToBean(table_detail, QmSapTextBean.class);
ps.setString(1, qm.getZDSTA());
ps.setString(2, qm.getZVALUE());
ps.setString(3, qm.getZMEINS());
ps.setString(4, qm.getZDEND());
ps.setString(5, qm.getZDMAXS());
ps.setString(6, qm.getMDNUM());
ps.addBatch();
qm=null;
if (num == 1000) {
ps.executeBatch();
ps.clearParameters();
num = 0;
}
}
ps.executeBatch();
conn.commit();
ps.close();
------解决思路----------------------
如果不宕机的话, 是可以的
------解决思路----------------------
理论上是可行的,但你为什么不运行一下试试呢,
------解决思路----------------------
从Java局部代码看来是没问题的,不过与qm=null;没多大关系。
设置qm=null在你这个代码里对GC基本没有好处。
class A{
static Object obj;
public void run(){
obj = ......;
//.........................
obj = null;
}
}
在上面这样的情况下,会对GC有点用。
------解决思路----------------------
本身每次循环,qm都会给一个新值,那么原来指向的对象就成了孤立对象,就会被gc纳入回收的范围里,因此是否设置为null关系并不大。当内存不够的情况下,jvm会自动进行gc,因此一般情况下,java不太会出现溢出的情况(当然除非你故意构造),但是可能会出现速度越来越慢的情况(由于频繁的gc,特别是full gc是将整个程序暂停进行资源回收),话说我的eclipse就是这样,越用越慢,然而jvm调优我也不会
