jconsole 查看 SXSSFWorkbook导出百万数据excel内存使用情况
模拟代码如下:计划使用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内存使用情况相关推荐
- POI导出百万数据 EXCEL addMergedReigon 合并单元格慢的问题解决
本文最重要的就是以下重写的方法,如果你仅仅是感觉导出慢,原因又是因为合并单元格,那么你直接用一下方法合并就好. private static void addMergedReigon(CTWorksh ...
- POI报表入门,excel,使用事件模型解析百万数据excel报表
POI报表入门,excel 1.pom依赖: <?xml version="1.0" encoding="UTF-8"?> <project ...
- springboot easyexcel导出百万数据优化
说明 由于某些原因系统jvm内存最大只能给到512,但是要导出百万数据该如何实现呢?传统的一次性导出肯定是不行的 优化 Excel导出基于 springboot , easyexcel 依赖: < ...
- 百万数据报表导出:使用SXSSFWorkbook完成百万数据报表打印
在原有代码的基础上替换之前的XSSFWorkbook,使用SXSSFWorkbook完成创建过程即可 /*** 当月人事报表导出* 参数:* 年月-月(2018-02%)*/ @RequestMapp ...
- 根据实体excel导入导出百万数据,可修改表头名称
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 表格导入导出实现效果展示 根据实体类导出模板 读取表格数据 导出数据为excel 进阶:修改表格导出的列头 controll ...
- Excel导出百万数据
1.需求概述 用户在UI界面上点击全部导出按钮,就能导出所有商品数据,但导出的记录条数可能是200万. 面临问题: 1.如果同步导数据,接口很容易超时. 2.如果把所有数据一次性装载到内存,很容易引起 ...
- python导出百万数据到excel_使用python将大量数据导出到Excel中的小技巧分享
使用python将大量数据导出到Excel中的小技巧分享 今天小编就为大家分享一篇使用python将大量数据导出到Excel中的小技巧心得,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看 ...
- C#中导出百万级Excel只需几秒除了NPOI还可以这样
场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...
- JavaWEB_POI导出大量数据excel(50万左右)
POI 对大数据量的导出是一个难点,这里博主总结了两种处理方式: 方式一,使用高版本的POI,具有内存自动释放的特点. 方式二,将数据导出到多个Excel中,并进行压缩处理,上传到服务器中. 方式一: ...
最新文章
- X-UA-Compatible
- Dubbo基础专题——第四章(Dubbo整合Nacos分析细节点)
- 前端学习笔记day01 html 标签之音频 embed+audio+video
- Python的lambda匿名函数
- cdockpane限制调整大小_影视后期制作小伙伴必看:使用AU对声音质量进行调整的三大技巧...
- 有符号数与无符号数间的转换
- AMOLED面板驱动芯片紧缺将持续至2022年
- Flex读取txt文件里的内容报错
- 电容元器件外观视觉检测系统方案设计-东莞康耐德
- Python乌龟吃鱼小游戏
- Unity Shader-法线贴图(Normal)及其原理
- linux总复习(二)
- 再添荣誉!青软集团获评「山东省科技小巨人企业」称号
- 如何理解图片RGB通道在python(numpy)中的数据构成
- Mac软件无响应怎么办?
- 磁盘存储链式的B树与B+树
- php和python学不明白_现在自学php和python那个合适?
- outer和left outer join有什么区别
- 关于如何使用C++读取.dbf文件
- 微信提现到零钱 CA_ERROR报错总结
热门文章
- echarts双向条形图案例
- Fiel Test in Perl
- matlab进度条的使用
- vue中使用el-table设置排名前三用金银铜的图标展示,其余排名正常展示
- python-docx与docx的区别
- 关于安装composer提示could not open input file composer.phar的问题解决
- RJM8L151 基于额温枪开发资料
- city json 数据
- iOS编译时报错The run destination John的 iPhone is not valid for Running the scheme 'Test'.
- 四川成立大数据发展研究会 拟建公共云暨数据交易中心