java excel poi 大数据量50W 内存溢出

求java的poi导出大数据内存溢出解决方法。。数据量在50W左右。publicvoidtest(){for(inti=0;i<20;i++){addData();}}p... 求java的poi导出大数据内存溢出解决方法。。数据量在50W左右。
public void test(){

for(int i=0;i<20;i++){
addData();
}

}
public void addData() {
FileInputStream is

XSSFWorkbook wb
SXSSFWorkbook swb
Sheet sheet1 = swb.getSheet("Sheet0");
for(int i =0;i<1000;i++){

Row row = sheet1.createRow(sheet1.getLastRowNum() + 1);
row.setHeightInPoints((short) 12);row.createCell(0).setCellValue("20120710");
row.createCell(1).setCellValue("23");row.createCell(2).setCellValue("43");
wb.write(os);

}
展开
 我来答
jiminsxtpy
2013-06-05 · TA获得超过234个赞
知道小有建树答主
回答量:190
采纳率:100%
帮助的人:198万
展开全部
50W数库EXCEL打开也有难度,建议导入CSV格式文件,或分多个文件。
关于内存溢出,注意以下几点:
1,分页分批从数据库里查询数据。
2,注意变量的释放,特别是LIST和MAP之类的引用,如果定义成全局变量或静态变量就会很难释放。
3,调大虚拟机内存大小。
神将李少卿
2016-01-11 · 超过14用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:6.4万
展开全部
首先内存溢出的原因确定是Excel数据过大吗?如果是的话你可以考虑加大内存,或者可以把Excel按照sheet页逐个读取,每个sheet页最大65535条数据这样就避免了内存溢出的问题
假如你封装的读Excel的方法是readExcel(InputStream is)
{.....}
那么把方法改成readExcel(Sheet sheet){
直接读sheet内容
}
获取Excel的时候直接按照sheet页循环调用
for(...){
获取sheet页
readExcel(sheet);
执行持久化操作
System.gc();
}
如果不行的话只能加大内存了,因为可能当问件读到内存中时就已经内存溢出了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JoJn007
2013-06-05 · TA获得超过108个赞
知道答主
回答量:77
采纳率:0%
帮助的人:63.7万
展开全部
POI操作Excel还存在一些缺陷,如大文件读取,大文件追加写入的话,会有文件过大引起内存溢出的问题。
如果是往空Excel文件中导入数据,完全可以不用关文件的大小,只要不超过Excel的限制即可:
http://poi.apache.org/spreadsheet/how-to.html#sxssf
我写过几百M的数据
链接上有官方提供的例子。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
招宛亦06
2015-12-21 · 超过18用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:33.5万
展开全部
Workbook workbook = new SXSSFWorkbook(1000);
poi有个机制 每次往内存中写1000条数据,这个1000你可以改的 尽量别大于10000条数据,写完1000条数据后再重新写,这样就不会内存溢出了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
结束之2012
2013-06-05 · 超过70用户采纳过TA的回答
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:138万
展开全部
excel 最多只能6W 多行 你50W 肯定不行
要不就 每6W行分一个file
要不就用csv文件 这个support
追问
2007格式的就可以写到100W啊。

public void test(){
for(int i=0;i<20;i++){
addData();
}

}

我没有读数据库的数据,就这样存都报溢出。。。。
追答
你是直接JDBC load出来的 还是用了 类似toplink的 工具
如果用了的话 可能是50W数据 直接load死它了 分批load 数据

如果直接JDBC的话: 就分save。一次那么都,估计内存不够
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式