java上传excel30000条数据内存泄露 本帖最后由 mengyalizuopeng 于 2011-12-21 10:12:05 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分批次提交,我记得好像一个batch提交数量是有限制的,大概也就在2~3万左右。 还没到提交呢 ..我先把 excel放在 数组里.. 数组装不下.....囧 把一个excel分多个sheet,分sheet读取内容到内存,这样就不会内存溢出了 我先把 excel放在 数组里.. 数组装不下在文件流中分配读入到内存,在用batch提交,不要一下读入内存,这样肯定memory out. 数组内放一点 提交一点,如果没有序列,可以考虑线程不要一次性提交太多比如可以几千一个批次另外batch限制是65535好像,不过如果是excel03版以前 单表行数也是65535,太多了要分表 我刚断点了 InputStream is = new FileInputStream(fileName); jxl.Workbook rwb = Workbook.getWorkbook(is); 这就溢出了 要不这样吧:分成十个文件,打个zip包后上传到服务器端某个目录。服务端先做个解zip包的操作,然后循环读取各个文件。 现实中这么大的Excel,谁会用呢??? 不用jxl,用OutputStreamWriter来一点一点输出 再狠点。JDBC读,不过问题会不少 那是肯定溢出的,jxl是将数据读取到内存了,解决方法有两种:第一可以设置jvm的虚拟内存。这个简单方便,但不是长久之计;第二可以进行分批处理,我看你是先读取了excel而文件中数据又很多,这个时候要分几个sheet工作表。 上传到数据库我经常从excel导入数据到oracle不过不用java,直接使用sqlldr 一般情况下,excel文档不会超过10M吧,溢出可能是你代码里有无限循环了,再仔细审查一下代码吧 这么悲催我上传下载。。读写一个65536条数据的excel一点问题没有。。Workbook.getWorkbook(is); 这句溢出。可能原因:1. 每行数据量比较大2. jvm分配内存小了3. 调大tomcat内存参数。。 “蓝桥杯”决赛题3 关于线程的开启跟关闭。。 有三个白子和三个黑子如下图布置: java线程可否重名 这段程序的语法错在哪里呀????? 求一个用java实现了的单链表逆序输出的问题 要一个函数周期执行,用什么方法呢? 初学者的疑问:JBuilder8如何调试Applet 请教:程序返回system#noboundexception是什么意思,我是做c++的,偶尔用次java就手忙脚乱的。各位帮忙 谁有rose2000或者2001的crack或者license?请给URL,[email protected],马上给分 swt中,怎么添加TreeItem的监听事件。 请教一道java面试题
在文件流中分配读入到内存,在用batch提交,不要一下读入内存,这样肯定memory out.
不要一次性提交太多
比如可以几千一个批次
另外batch限制是65535好像,不过如果是excel03版以前 单表行数也是65535,太多了要分表
jxl.Workbook rwb = Workbook.getWorkbook(is); 这就溢出了
那是肯定溢出的,jxl是将数据读取到内存了,解决方法有两种:
第一可以设置jvm的虚拟内存。这个简单方便,但不是长久之计;
第二可以进行分批处理,我看你是先读取了excel而文件中数据又很多,这个时候要分
几个sheet工作表。
我经常从excel导入数据到oracle
不过不用java,直接使用sqlldr
可能原因:
1. 每行数据量比较大
2. jvm分配内存小了
3. 调大tomcat内存参数。。