【发布时间】:2019-07-09 11:29:41
【问题描述】:
我正在尝试编组大约 100 万个对象的大型列表,并且在尝试将对象添加到 Arraylist 中的大约 20K 个对象时,它给出了 OutOfMemoryError。我想要一个 XML 文件。我怎样才能做到这一点?
注意:我的 JVM 内存限制为 512MB
【问题讨论】:
-
你能分享你的代码吗?
标签: java performance memory-management jaxb
我正在尝试编组大约 100 万个对象的大型列表,并且在尝试将对象添加到 Arraylist 中的大约 20K 个对象时,它给出了 OutOfMemoryError。我想要一个 XML 文件。我怎样才能做到这一点?
注意:我的 JVM 内存限制为 512MB
【问题讨论】:
标签: java performance memory-management jaxb
您需要在加载项目时将项目保存在 xml 文件中。很明显,您不能在 ArrayList 的集合中添加很多项目,但要保持低内存。
在这种情况下,您需要使用以下内容将 XML 写入文件:XMLStreamWriter。 避免使用在写入磁盘之前将所有内容加载到内存中的库。
【讨论】:
您需要了解,在 64 位机器中,每个指针占用 8 个字节。这就是为什么当您尝试加载大型集合时,您不仅仅是加载数据,而是为每个字段、对象模型的每个属性和集合的每个成员分配内存。
你有三个选择:
【讨论】: