【发布时间】:2016-04-30 16:15:36
【问题描述】:
我有一个很大的 XML 文件,我正在使用 SAX 解析器进行解析。在处理过程中,我创建了一个大的 HashMap,其中包含用于解析 JSON 的键和值。
据我了解,在 java 8 中,您不需要在运行 java 应用程序时设置任何 Permgen 设置,它会在堆中创建字符串,但我仍然会遇到 OutOfMemoryError。我的理解是正确的还是我选择了错误的解析器?
【问题讨论】:
-
请添加更多详细信息。你的堆大小、数据的大小以及你认为OOM在代码中的哪个位置。
-
String 总是存储在堆中,在 Java 8 中 MetaSpace 取代了 PermGenSpace 但这并不重要:PermGenSpace 用于存储类声明,虽然我对 MetaSpace 不是很了解,但我很确定你很少需要调整它
-
嗨 Aaron 和 Abhishek,感谢您的回复。我认为字符串是运行时常量池的一部分,它类似于堆但不完全是。你觉得还有什么,我应该试试?
-
另外,你认为看看我将使用什么 GC 是否重要?
-
我猜你指的是
String文字池。很可能在您的 SAX 处理程序中,您将创建对象而不是文字。同样,这都是猜测,问题中没有任何细节。
标签: java xml memory out-of-memory