我们需要加载和读取非常大的xlsx文件,其中可能包含100列和1000行。我们尝试加载大小为8MB的文件,并且应用程序和Web服务器上的最大堆大小都设置为4GB。代码在以下行中运行到内存不足
XSSFWorkbook workbook = new XSSFWorkbook(is);
我想知道8MB文件是否占用了大到4GB的堆大小。如果是这种情况,可以采取哪些措施来避免遇到内存不足问题。
答案 0 :(得分:1)
8MB文件是压缩的,内部字符串/ XML数据很容易以高比率压缩,因此实际数据实际上会更多,尽管使用此文件超过4GB内存设置仍然听起来很奇怪。
如果您希望能够读取任意的愤怒文件,那么通过XSSFReader作为POI的一部分提供了一个流媒体界面。这允许读取类似于SAX XML Parsing的文件,而无需将完整文档加载到内存中。
在写作方面,您可以查看SXSSFWorkbook,它允许通过内部流媒体机制写出大文件,例如, here举个例子。