使用 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 默认使用内联字符串而不是共享字符串表. 这非常有效, 因为没有文档内容需要保存在内存中, 但也被称为制作与某些客户不兼容的文档. 在启用共享字符串的情况下, 文档中的所有唯一字符串必须保存在内存中. 根据您的文档内容, 这可能比共享字符串被禁用时使用更多的资源. 在决定是否启用共享字符串之前, 请仔细检查您的内存预算和兼容性需求.
来源: http://www.bubuko.com/infodetail-3487940.html