OutOfMemoryError - 我可以将数据转储到文件而不是内存吗?

时间:2011-06-30 14:57:05

标签: java performance memory-management out-of-memory

我正在使用提供类似remoteConnection.getObjects()的方法的API来获取远程服务器中的对象列表。该列表有时很大并导致Java堆空间OutOfMemoryError。有没有办法将这些对象直接转储到文件而不是将它们加载到内存中?

2 个答案:

答案 0 :(得分:5)

根据你的描述,不幸的是答案是没有你不能 - “内存不足”实际上并不意味着你的物理内存耗尽,这意味着你的虚拟地址空间太完整/碎片化,不再分配。

简而言之 - 内存到磁盘的分页位将无​​济于事,因为物理内存不是瓶颈,限制因素只是解决内存的能力。 (操作系统已经可以无缝地将内存分页到磁盘上了。)

您的选择(我可以看到)是:

  • 欢迎API开发人员更改其API,或者找到使用以较小块返回数据的API的替代方法
  • 尝试通过以下方式增加可用地址空间:
    • 尽可能减少现有的内存使用量
    • 增加地址空间(例如,目标x64)

答案 1 :(得分:3)

遗憾的是,如果返回该数据量的API,则无法做很多事情。 您可以使用-Xmx jvm arg来增加堆大小吗?