java - 是否可以在运行时检查当前使用的堆空间?

标签 java apache-poi heap-memory

我正在编写一个应用程序,它使用 apache-POI 生成一个大的 xlsx 文件。 在某个时间我得到 OutOfHeapSpace 异常。

我想解决这个问题的方法是当我确定我很快就会用完空间时,将内容写入xlsx文件,从而释放内存,然后从磁盘读取文件并继续写入。

更好的解决方案可能是预定义我将在每个“ block ”中写入的单元数,然后将 block 写入磁盘,但无论如何这让我想知道是否有办法确定堆空间那是在运行时留下的?

最佳答案

在运行时释放未使用的内存可能不是很可靠,因为 JVM 在决定何时进行垃圾回收方面有相当大的自由度。

最近兴趣点introduced the SXSSF API它使用流式传输,从而显着减少了编写电子表格的内存占用。即使对于非常大的 xsls 文件,这也应该有所帮助。显示了一些缺点 here .但如果您可以忍受它们,这应该可以减轻与堆相关的问题。

关于java - 是否可以在运行时检查当前使用的堆空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963214/

相关文章:

java - Thymeleaf 以一种形式提交多个提交按钮

excel apache poi 开头的 Java 插入表

java - 代码运行但没有给我正确的输出

java - 尽管在代码中设置,Android 不显示键盘

java - Apache Poi Android

c++ - C/C++ 模式到 USE_HEAP 或 USE_STACK

java - JVM 是否交换堆?

java - 操作和变量是否会在堆栈顶部创建?

java - Spring 3.2/hibernate 4.1.9 : Use of @OneToMany or @ManyToMany targeting an unmapped class error

java - 使用 java Apache POI 的彩色标题单元格