当前位置: 代码迷 >> Java Web开发 >> 关于释放JAVA对象内存的有关问题
  详细解决方案

关于释放JAVA对象内存的有关问题

热度:136   发布时间:2016-04-13 22:33:21.0
关于释放JAVA对象内存的问题
代码如下,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调优我也不会
  相关解决方案