编组大量给出OutOfMemoryError的对象

时间:2019-02-15 10:29:11

标签: java performance memory-management jaxb

我试图封送一大堆〜100万个对象,并且在尝试将Arraylist中的对象添加到约20K个对象时给出OutOfMemoryError。我想要一个XML文件。我该如何实现?

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

2 个答案:

答案 0 :(得分:0)

您需要在加载项目时将其保存在xml文件中。显然,您不能将很多项目作为ArrayList添加到集合中,但要保持较低的内存。

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

答案 1 :(得分:0)

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

您有三个选择:

  • 分配更多的内存。
  • 将所有内容放入内存时查找更紧凑的格式。
  • 第三种方法是实现某种滚动,以便一次只加载部分内容。