Tag: sxssf

如何在不设置-Xmx标志的情况下限制堆的消耗

问题 我有一个包含许多公式的.xlsx文件。 我想把这个文件转换成一个新的.xlsx文件,所有的公式都用其绝对值replace。 为什么? 可能与这个问题没有关系。 我做了什么? 我的目标是在尽可能less的堆内存中执行此任务。 所以我使用了apache POI XSSF event API的组合来读取源文件和SXSSF API来写输出文件。 它运作良好。 意见 所有测量都使用JProfiler 10进行 当我运行我的代码来转换大约25K +行的文件(大约25K * 23的公式)时,它在峰值处使用大约250 MB的堆空间。 现在我用-Xmx24M运行相同的命令,代码被设置为在这个内存限制内运行,这个限制比第一次运行要低得多。 问题 如果我的代码已经可以在这个低内存限制下运行,为什么在第一次运行中需要250MB的内存呢? 是否可以限制这个特定的代码来限制它的内存消耗在一个下限内,即使Xmx没有被设置?