模拟代码如下:计划使用SXSSFworkbook导出1000000行,230列数据的excel.

import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.*;@RestController()
@RequestMapping("export")
public class ExcelExportController {@GetMapping("excel")public String exportExcel() throws IOException {System.out.println("开始");long starttime = System.currentTimeMillis();FileInputStream in = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\test\\wechatdetail_.xlsx"));OutputStream out = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\test\\wechatdetail_2.xlsx"));XSSFWorkbook wo = new XSSFWorkbook(in);SXSSFWorkbook sw = new SXSSFWorkbook(wo,100);SXSSFSheet sheet = sw.getSheetAt(0);for (int i = 0; i <500000 ; i++) {SXSSFRow row = sheet.createRow(i + 2);for (int j = 0; j <230 ; j++) {SXSSFCell cell = row.createCell(j);cell.setCellValue("value:"+j);}}sw.write(out);sw.dispose();in.close();out.close();long endtime = System.currentTimeMillis();System.out.println("结束耗时(ms):"+(endtime-starttime));return "over";}
}

执行过程中报错了。提示

java.io.IOException: 磁盘空间不足。at java.io.FileOutputStream.writeBytes(Native Method) ~[na:1.8.0_241]at java.io.FileOutputStream.write(FileOutputStream.java:326) ~[na:1.8.0_241]at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) ~[na:1.8.0_241]

这个印证了SXSSFworkBook是使用了磁盘空间换内存空间。我C盘原本14G多,后面只剩3G多了。
看下jconsole的内存监控:

但是因为磁盘不够跑着跑着就蹦了。我还是改成50万试试。
执行完成后:内存使用如图所示

可以看到内存使用增长到一定值时,又被回收掉了。内存使用稳定在1-1.5G之间。
生成的文件为369M大小。这文件也太大了把。估计是我的列太多了把,足足有230列。这绝对已经是大批量数据了。导出这么大数据占用内存最大不超过1.5g很可以了。再看看导出的时长为

2020-11-08 15:17:35.859  INFO 15084 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 4 ms
开始
结束耗时(ms):253010

253s,4分多钟就导完了,很快。

但是就比较消耗磁盘,占用了C盘6G多。导出完释放资源回复到14g。
有一点不好的是导出完成后内存貌似没有回收掉,内存一直维持在高水平,直到下一次导出才回收掉。

结论是:SXSSFwokrbook很适合导出大批量数据,需要注意预留内存最好1.5g以上,不然还是容易有内存溢出的风险。还有需要预留好磁盘空间。按照生成370m文件占用6G磁盘的话,每M大小文件需要占用(6/370)=162m大小的磁盘,即每生成1m大小的excel需要162m的磁盘空间。

jconsole 查看 SXSSFWorkbook导出百万数据excel内存使用情况相关推荐

  1. POI导出百万数据 EXCEL addMergedReigon 合并单元格慢的问题解决

    本文最重要的就是以下重写的方法,如果你仅仅是感觉导出慢,原因又是因为合并单元格,那么你直接用一下方法合并就好. private static void addMergedReigon(CTWorksh ...

  2. POI报表入门,excel,使用事件模型解析百万数据excel报表

    POI报表入门,excel 1.pom依赖: <?xml version="1.0" encoding="UTF-8"?> <project ...

  3. springboot easyexcel导出百万数据优化

    说明 由于某些原因系统jvm内存最大只能给到512,但是要导出百万数据该如何实现呢?传统的一次性导出肯定是不行的 优化 Excel导出基于 springboot , easyexcel 依赖: < ...

  4. 百万数据报表导出:使用SXSSFWorkbook完成百万数据报表打印

    在原有代码的基础上替换之前的XSSFWorkbook,使用SXSSFWorkbook完成创建过程即可 /*** 当月人事报表导出* 参数:* 年月-月(2018-02%)*/ @RequestMapp ...

  5. 根据实体excel导入导出百万数据,可修改表头名称

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 表格导入导出实现效果展示 根据实体类导出模板 读取表格数据 导出数据为excel 进阶:修改表格导出的列头 controll ...

  6. Excel导出百万数据

    1.需求概述 用户在UI界面上点击全部导出按钮,就能导出所有商品数据,但导出的记录条数可能是200万. 面临问题: 1.如果同步导数据,接口很容易超时. 2.如果把所有数据一次性装载到内存,很容易引起 ...

  7. python导出百万数据到excel_使用python将大量数据导出到Excel中的小技巧分享

    使用python将大量数据导出到Excel中的小技巧分享 今天小编就为大家分享一篇使用python将大量数据导出到Excel中的小技巧心得,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看 ...

  8. C#中导出百万级Excel只需几秒除了NPOI还可以这样

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

  9. JavaWEB_POI导出大量数据excel(50万左右)

    POI 对大数据量的导出是一个难点,这里博主总结了两种处理方式: 方式一,使用高版本的POI,具有内存自动释放的特点. 方式二,将数据导出到多个Excel中,并进行压缩处理,上传到服务器中. 方式一: ...

最新文章

  1. X-UA-Compatible
  2. Dubbo基础专题——第四章(Dubbo整合Nacos分析细节点)
  3. 前端学习笔记day01 html 标签之音频 embed+audio+video
  4. Python的lambda匿名函数
  5. cdockpane限制调整大小_影视后期制作小伙伴必看:使用AU对声音质量进行调整的三大技巧...
  6. 有符号数与无符号数间的转换
  7. AMOLED面板驱动芯片紧缺将持续至2022年
  8. Flex读取txt文件里的内容报错
  9. 电容元器件外观视觉检测系统方案设计-东莞康耐德
  10. Python乌龟吃鱼小游戏
  11. Unity Shader-法线贴图(Normal)及其原理
  12. linux总复习(二)
  13. 再添荣誉!青软集团获评「山东省科技小巨人企业」称号
  14. 如何理解图片RGB通道在python(numpy)中的数据构成
  15. Mac软件无响应怎么办?
  16. 磁盘存储链式的B树与B+树
  17. php和python学不明白_现在自学php和python那个合适?
  18. outer和left outer join有什么区别
  19. 关于如何使用C++读取.dbf文件
  20. 微信提现到零钱 CA_ERROR报错总结

热门文章

  1. echarts双向条形图案例
  2. Fiel Test in Perl
  3. matlab进度条的使用
  4. vue中使用el-table设置排名前三用金银铜的图标展示,其余排名正常展示
  5. python-docx与docx的区别
  6. 关于安装composer提示could not open input file composer.phar的问题解决
  7. RJM8L151 基于额温枪开发资料
  8. city json 数据
  9. iOS编译时报错The run destination John的 iPhone is not valid for Running the scheme 'Test'.
  10. 四川成立大数据发展研究会 拟建公共云暨数据交易中心