码迷,mamicode.com
首页 > 编程语言 > 详细

解决Java POI导出海量Excel数据内存溢出

时间:2020-04-02 01:27:28      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:信息   err   预算   api   文档   ror   java   版本   org   

使用POI导出Excel数据的时候有两个方法可以创建WorkBook:

  • HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls
  • XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx

当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space内存溢出错误。

从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API,也就是SXSSFWorkbook。

SXSSFWorkbook-来至官方的解释:实现“BigGridDemo”策略的流式XSSFWorkbook版本。这允许写入非常大的文件而不会耗尽内存,因为任何时候只有可配置的行部分被保存在内存中。您可以提供用作书面数据基础的模板工作簿。有关详细信息,请参见https://poi.apache.org/spreadsheet/how-to.html#sxssf 请注意,仍然可能会消耗大量内存,这些内存基于您正在使用的功能,例如合并区域,注释......仍然只存储在内存中,因此如果广泛使用,可能需要大量内存。SXSSFWorkbook默认使用内联字符串而不是共享字符串表。这非常有效,因为没有文档内容需要保存在内存中,但也被称为制作与某些客户不兼容的文档。在启用共享字符串的情况下,文档中的所有唯一字符串必须保存在内存中。根据您的文档内容,这可能比共享字符串被禁用时使用更多的资源。在决定是否启用共享字符串之前,请仔细检查您的内存预算和兼容性需求。

解决Java POI导出海量Excel数据内存溢出

标签:信息   err   预算   api   文档   ror   java   版本   org   

原文地址:https://blog.51cto.com/xvjunjie/2483993

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!