本文主要是介绍39万条数据生成Excel,内存溢出问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、OOM异常:发现一个查询账户交易明细写入Excel文件方法抛出异常,内存溢出。
2、服务器内存4G,根据日志查出内存占用对象,Excel 16列*592B*400000条数据=3788,800,000B~3.7G计算将近达到4G,内存溢出。
3、查询原因,数据库查询采用1000条一查,查询应该不回导致内存问题。后来生成Excel时候,大量对象在内存中没有释放。原因是使用了XSSFWorkbook生成文件,在创建Excel、或者说写Excel的时候内存开销是很大的,XSSFWorkbook写入excel不会主动释放内存,适合小数据量的文件生成。
4、于是乎apache的POI项目推出了一个实现大数据量的流式版本XSSFWorkbook,也称之为SXSSFWorkbook,它允许了我们编写非常大的文件而不会耗尽内存,因为在任何时候只有行的可配置部分保存在内存中。后来改为SXSSFWorkbook 最大一个sheet页可以生成1048000条数据,百万级以上。
5、 创建Workbook时设置工作簿保存在内存中数据的条数,这样一旦这个Workbook中数据量超过1000就会写入到磁盘中,减少内存的使用量来提高速度和避免溢出。
Workbook wb = new SXSSFWorkbook(1000);
这篇关于39万条数据生成Excel,内存溢出问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!