在 本机上用eclipse导出一百多万的数据导出,没有问题,但是部署在应用服务器上就会内存溢出,而且我把本机的tomcat也拷贝过去了。其它一个功能,比这数据还多几W,只不过少写出了几个字段,也能正常导出。int totalSize = behaviorPortraitService.querySiletUserPortraitCountMonth(sietUserPortraitForm.getParams());
int pageNum = 0;
if (totalSize % 1000000 == 0) {
pageNum = totalSize / 1000000;
}else{
pageNum = totalSize / 1000000 + 1;
}
write.append("
年/月
IMSI
手机号码
沉默天数
开卡时间"
+ enter);
outSTr = response.getOutputStream(); // 建立
buff = new BufferedOutputStream(outSTr);
// 循环总页数,得到每页的页数
for (int i = 1; i <= pageNum; i++) {
// 根据页数,得到 PageResult对象
list = behaviorPortraitService.exportSiletUserPortraitMonth(sietUserPortraitForm.getParams(),i,100000);
// 循环List集合进行写入
for (int j = 0; j < list.size(); j++) {
// 循环集合,写入数据到TXT中
write.append(list.get(j).getBegin_endtime());
write.append(" " + list.get(j).getImsi());
write.append(" " + list.get(j).getMsisdn());
write.append(" "+ list.get(j).getSilencedays());
write.append(" " + list.get(j).getStarttime()
+ enter);
}
// 写完一个分页对象之后,清空List,清楚缓存
list.clear();
System.gc();
}
buff.write(write.toString().getBytes("UTF-8"));错误信息:org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError:
Java heap space
1 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
你创建了一个非常大的字符串,然后又转换成一个非常大的 byte[]。
我建议把数据逐步写入输出流,不用使用 write.append,只使用二进制的 buf.write,如果你想写文本,使用下面的代码:
PrintWriter pw = new PrintWriter(new OutputStreamWriter( new BufferedOutputStream(socket.getOuptutStream()), "UTF-8")); pw.print( some text here ); pw.print( some more ext here ); pw.println( the end of the line ); pw.close(); //
不需要使用很多内存。
添加回答
举报
0/150
提交
取消