我正在编写一个应用程序,它使用 apache-POI 生成一个大的 xlsx 文件。 在某个时间我得到 OutOfHeapSpace 异常。
我想解决这个问题的方法是当我确定我很快就会用完空间时,将内容写入xlsx文件,从而释放内存,然后从磁盘读取文件并继续写入。
更好的解决方案可能是预定义我将在每个“ block ”中写入的单元数,然后将 block 写入磁盘,但无论如何这让我想知道是否有办法确定堆空间那是在运行时留下的?
最佳答案
在运行时释放未使用的内存可能不是很可靠,因为 JVM 在决定何时进行垃圾回收方面有相当大的自由度。
最近兴趣点introduced the SXSSF API它使用流式传输,从而显着减少了编写电子表格的内存占用。即使对于非常大的 xsls 文件,这也应该有所帮助。显示了一些缺点 here .但如果您可以忍受它们,这应该可以减轻与堆相关的问题。
关于java - 是否可以在运行时检查当前使用的堆空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963214/