编组提供OutOfMemoryError的大型对象列表

问题描述 投票:1回答:2

我试图编组大量的对象~100万,并且在尝试在~20K对象中添加Arraylist中的对象时给出了OutOfMemoryError。我想有一个XML文件。我怎样才能做到这一点?

注意:我的JVM内存限制为512MB

java performance memory-management jaxb
2个回答
0
投票

您需要在加载时将项目保存在xml文件中。很明显,你不能将一个集合作为ArrayList添加很多项,但保持低内存。

在这种情况下,您需要使用以下内容编写XML文件:XMLStreamWriter。在写入磁盘之前,请避免使用加载内存中所有内容的库。


0
投票

您需要了解在64位机器中,每个指针的成本为8个字节。这就是为什么当您尝试加载大型集合时,您不只是加载数据,而是为每个字段,对象模型的每个属性以及集合的每个元素分配内存。

你有三个选择:

  • 分配更多内存。
  • 将所有内容放入内存时查找更紧凑的格式。
  • 第三是实现某种滚动,以便一次只加载一部分集合。
© www.soinside.com 2019 - 2024. All rights reserved.