需要上传15M左右的文件,读取其中大概10万行的数据,然后插入到数据表中,要么全成功,要么回滚。可是在测试时发现weblogic的内存消耗在160M,怎样才能优化,使内存消耗可以小很多?这个主要是文件读取的代码问题,还是与数据库交互插入数据时的代码问题呢?或者两者都有原因?

解决方案 »

  1.   

    10万行数据,应该分批处理,不要一次性全部从文件读取.
    比如可以每次读取1000行,插入到数据库, 记得操作完成释放内存,
    比如 transaction.begin();
    ....
     while (从文件读取数据) {
         List dataBuffer = new ArrayList();
        .........读取1000条数据
            .........插入到数据库
         dateBuffer.clear();
    }
    .....
    transaction.commit()
          
            
      

  2.   


    怎么会差不多呢, dataBuffer每次最大值存储1000条数据,
    做完clear,虚拟机会过来回收内存
      

  3.   

    是数据库里一条记录存15M文件内容,还是这100W行东西要存100W条记录啊.
    定义一个count=0;
    while (从文件读取数据) { 
        List dataBuffer = new ArrayList(); 
        .........读取1000条数据  读一条count+1
            .........插入到数据库 
    if(count%1000==0) 就执行clear;
        dateBuffer.clear(); 
    }
      

  4.   

    transaction.commit() 之前数据放在哪儿?内存?数据库内存或者应用内存中吧?楼主也可以考虑使用缓存, 将内容暂时缓存到硬盘上,再作操作.