首先,我遇到了从数据库获取数据的问题,它占用了太多的内存并失败了。我已经设置了-Xmx1500M,并使用滚动ResultSet解决了这个问题。现在我需要从数据中创建一个XML文件,但是我无法将它放入一个文件中。目前,我的做法是:
while(rs.next()){
i++;
xmlStringBuilder.append("\n\t<row>");
xmlStringBuilder.append("\n\t\t<ID>" + Util.transformToHTML(rs.getInt("id")) + "</ID>");
xmlStringBuilder.append("\n\t\t<JED_ID>" + Util.transformToHTML(rs.getInt("jed_id")) + "</JED_ID>");
xmlStringBuilder.append("\n\t\t<IME_PJ>" + Util.transformToHTML(rs.getString("ime_pj")) + "</IME_PJ>");
//etc.
xmlStringBuilder.append("\n\t</row>");
if (i%100000 == 0){
//stores the data to a file with the name i.xml
storeKBR(xmlStringBuilder.toString(),i);
xmlStringBuilder= null;
xmlStringBuilder= new StringBuilder();
}
现在,我已经成功地获取了12个100 MB的文件。接下来,我想要将所有数据存储到一个文件中(然后进行压缩),但是如果我只是删除if部分,就会导致内存不足。我考虑过试图写入文件、关闭文件,然后再打开文件,但这样做对我帮助不大,因为当我打开文件时,我仍需将其加载到内存中。