【问题标题】:Java 8 String outofmemory errorJava 8 字符串内存不足错误
【发布时间】: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


【解决方案1】:

你应该看看以下 -

  1. 您正在使用哪个垃圾回收器。

  2. 如果您使用的是 IDE,请检查您是否使用了正确的 java 版本。有时您的 IDE 可以设置为在特定 JVM 上运行。

顺便说一句,您使用的是哪个 java 安装?

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多