博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POI读取/生成Excel大文件,有高人吗?
阅读量:2790 次
发布时间:2019-05-13

本文共 512 字,大约阅读时间需要 1 分钟。

最近在搞一个通用文件处理服务器,需要处理excel文件,但是有的excel文件大小超过3M,读取文件时直接导致jvm异常:gc overhead limit exceeded。

原来poi读取excel时有两种模式,我们常用的是第一种,通俗点就是空间换时间/时间换空间:

  • 1种直接将整个excel读入内存后再解析userModel
  • 1种边读取边解析,比较省内存event-userModel

首先加大jvm内存参数

针对excel大文件读取,采用第二种模式来处理可以有效避免常见内存异常,但是得加上文件大小限制,如果文件特别大,那也会照样内存异常。

常用的工具包有阿里开源的easyExcel,easyPOI等,一两行代码搞定。但是第二种模式有个缺点是:无法读取用户当前打开的sheet(比如一个excel中有一个隐藏sheet,一个可见sheet,第一种模式可以使用getActiveSheetIndex()),只能一个一个读取sheet。

针对excel大量数据写入,借助SXSSFWorkbook,再加上数据分页处理,再加上数据记录条数限制,可以避免内存异常。

使用缓存+临时文件处理

不知有没有高人有更好的解决方案?

转载地址:http://nolmd.baihongyu.com/

你可能感兴趣的文章
【面试题】:兄弟字符串
查看>>
【面试题】:利用rand7模拟rand10
查看>>
【面试题】:老鼠喝毒药(二进制编码)
查看>>
编译原理的归约和推导
查看>>
反思 = =
查看>>
如何求first集与follow集
查看>>
【leetcode】:move zeros
查看>>
【Leetcode】: first badversion
查看>>
【leetcode】:ugly number
查看>>
【腾讯面试题】:斗地主随机
查看>>
【日记】:双11
查看>>
【POJ1939】:Diplomatic License
查看>>
【算法竞赛】:最小周期串
查看>>
【算法竞赛】:分数拆分
查看>>
【算法竞赛】:进位数统计
查看>>
【POJ2013】:Symmetric Order
查看>>
编译原理实验课反思之无知是一种罪
查看>>
【计算机网络】:IP分片详解及例题
查看>>
【生活小感】:关于poppin的思考
查看>>
【蓝桥杯】:切面条
查看>>