【问题标题】:Marshalling a large list of objects giving OutOfMemoryError编组大量对象给出 OutOfMemoryError
【发布时间】:2019-07-09 11:29:41
【问题描述】:

我正在尝试编组大约 100 万个对象的大型列表,并且在尝试将对象添加到 Arraylist 中的大约 20K 个对象时,它给出了 OutOfMemoryError。我想要一个 XML 文件。我怎样才能做到这一点?

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

【问题讨论】:

  • 你能分享你的代码吗?

标签: java performance memory-management jaxb


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    你有三个选择:

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

    【讨论】:

    • 能否请您提供第三个选项的参考:...一次只加载部分集合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多