Java生成大数据量Excel的OutOfMemoryError: Java heap space问题

shiwen1981 2007-04-26 11:33:16
主要测试了jexcelapi和apache的poi两个工具
由于数据量很大都出现了内存不足
java.lang.OutOfMemoryError: Java heap space
jvm的最大内存使用值我设到了100m
因为可能会多线程同时跑这个应用所以不考虑再给多内存了
jexcelapi在每个cell20byte输出65535*15到极限
65535*16就爆了
poi更小一点(这取决于两个工具数据结构设计的不同)
他们都是采用等数据收集完成然后一次写入的方式
读取也是一次把整个文件全部读入内存的方式工作
更新也是整个workbook的copy
所以可以理解对内存开销之大
请问针对excel处理还有没有更好的工具包
或者对这写包是否有针对这个问题的改写方案
谢谢各位了
...全文
2976 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
andysofan 2010-11-04
  • 打赏
  • 举报
回复
现在项目中正好遇到这样的问题,客户数据量比较大,一次可能 200w 以上,所以现在主要考虑的就是内存问题,在不影响其他用户操作的情况下处理......
iewxcep 2010-10-13
  • 打赏
  • 举报
回复
不知道楼主解决了这个问题没有 可否分享下 小弟我现在也遇到了这个问题
phuang3 2010-05-07
  • 打赏
  • 举报
回复
試試下載 jxl 2.6.12版本,輸出前先加上以下設定:

WorkbookSettings ws = new WorkbookSettings();
ws.setUseTemporaryFileDuringWrite(true);
.
.
.
魅影花舞 2009-10-11
  • 打赏
  • 举报
回复
我也遇到了这样的问题,什么时候能有个答案呢
xingbozy 2008-05-25
  • 打赏
  • 举报
回复
我也遇到同样的问题,一开始是每个sheet的不能超过65535的问题,后来进行了分页(sheet),但现在也出现了内存溢出的问题.现在正在考虑进行批量数据的追加方式,所谓"追加"我的思路其实就是"修改".如果有好的建议希望一起探讨.xingbozy@163.com
yangzhiqi07 2008-04-30
  • 打赏
  • 举报
回复
遇到同样问题
我现在分次查询数据(数据量几十万)
分次写入流
OutOfMemoryError没有出现

但写的excel文件打开出错
只有第一页数据正确
后面的都乱了(没有对齐到列)
liqdok 2007-05-20
  • 打赏
  • 举报
回复
java下操作excel推荐使用jxcell,商业组件,功能强大。
支持excel的绝大部分功能,包括公式(目前已支持260多个,并且可以实时计算),格式(颜色、字体、边框、甚至样式)、图表(条形图、柱状图、饼图、线图等)、图形对象(线条、矩形、多边形、图片)等等。还可以把excel直接导出为PDF文件。
jxcell在大数据量操作时内存占用比jxl、poi少,速度快(需要关闭实时计算模式)。
dongsj8325 2007-05-18
  • 打赏
  • 举报
回复
倒,这是个问题,顶!!!!我的项目马上也要搞生成excel报表了.......
shiwen1981 2007-05-18
  • 打赏
  • 举报
回复
to zhuxr2003:
但这两个api打开excel的时候好像都是全部读取数据的
就是说你要是做append的操作
首先得有足够的内存读取文件
然后他的保存机制是复制一份内存中的内容写入到文件
就是说需要两倍于文件内容大小的内存才可以
zhuxr2003 2007-05-16
  • 打赏
  • 举报
回复
数据量大肯定要分次写入excel,比如每个单sheet只写入1万行,有10万行数据就生成10个sheet.这样就避免了内存不足和excel单sheet最多行限制的问题.
shiwen1981 2007-05-16
  • 打赏
  • 举报
回复
to zfqjava
楼顶写了
jvm的最大内存使用值设到了100m
由于存在多进程的问题不考虑再加大
zfqjava 2007-05-10
  • 打赏
  • 举报
回复
我想你需要了解Java堆内存和设置一下参数,内存不可能不够用,
你在命令行加入下列的参数-Xms512m -Xmx1024m,我想也许不需要这么大的内存
wilowind 2007-05-10
  • 打赏
  • 举报
回复
如果没有好的解决办法,我考虑小数据量直接用jxl 或poi
大数据量 用java 调用vba 用模板生成。
vba的代码还没有,谁有提供一下, 另外是不是还要建odbc数据源
wilowind 2007-05-10
  • 打赏
  • 举报
回复
遇到同样的问题,强烈关注
shiwen1981 2007-04-26
  • 打赏
  • 举报
回复
to li_d_s:
excel单sheet是只能65535行
到达这个数量我会new sheet
我无法就解决的是内存溢出问题
li_d_s 2007-04-26
  • 打赏
  • 举报
回复
excel本来就只能65535行吧
shiwen1981 2007-04-26
  • 打赏
  • 举报
回复
to brooksychen(初晨之阳):
我要做的是提供给客户的报表
csv已经完成了
之前的excel是通过vba从csv中挖掘数据填充的
现在想优化一下直接生成excel提供给客户下载
谢谢你的回复
brooksychen 2007-04-26
  • 打赏
  • 举报
回复
你可以尝试一下用csv格式,这样就可以不用那些API,直接往csv文件里写(该文件是用“,”将数据分隔开的文本文件)
shiwen1981 2007-04-26
  • 打赏
  • 举报
回复
我考虑过每次写一定数据量
但这两个包更新时都首先要把整个excel读取到内存
也就是说不存在分批写入的可能
谢谢你的回复
伟大的左前卫 2007-04-26
  • 打赏
  • 举报
回复
多半是你代码问题。数据量大可以分成几次写入,这个完全可以由你控制的。
加载更多回复(4)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧