【问题标题】:Increase JAVA Heap space for 2gig+ XML File为 2gig+ XML 文件增加 JAVA 堆空间
【发布时间】:2014-08-21 16:50:22
【问题描述】:

我有一个简单的 Java 程序,我想用它来搜索一个大约 2 gig 的大型 xml 文件。我正在使用 intellij,但由于出现内存不足堆空间错误,因此无法运行它。

我已经将 intellij 编译器设置为使用最大内存(我的机器上有 4 个演出)。

我还有其他方法可以完成这项工作吗?

【问题讨论】:

标签: java out-of-memory heap-memory


【解决方案1】:

您可能想要使用基于流的方法,例如使用 Stax 或 Jackson, 这样您就不必一次将整个文档保存在内存中。

【讨论】:

    【解决方案2】:

    根据相关 XML 文件的详细信息,如果您使用 DOM-style 解析器,4GB 甚至 8GB 可能还不够。例如,ASCII 字符在 Java 字符串中表示时需要 两个 字节,并且在创建对应于各种 XML 元素的对象时会有相当多的开销。将整个文件作为对象层次结构加载到内存中通常需要比文件大小更多的空间。

    如果您只是在 XML 文档中搜索,您可能不需要对其元素进行随机访问。在这种情况下,像SAX 这样的串行访问模型更适合。 Java 已经包含一个 SAX 解析器,如 this tutorial from Oracle 中所述。

    【讨论】:

      【解决方案3】:

      您可以使用 jdk/bin 文件夹中的 jvisualvm 来监控和修改堆内存。

      【讨论】:

        【解决方案4】:

        “java.lang.OutOfMemoryError: Java heap space”错误会在你尝试向内存中的堆空间区域添加更多数据时触发,但是这些数据的大小超过了JVM在Java中可以容纳的大小堆空间。

        请注意,您的 Java 应用程序可以使用的内存量是在 JVM 启动期间指定的(例如,通过 -Xmx 和 -XX:MaxPermSize 参数)。在您的情况下,为编译器提供更多内存将无助于运行时 - 尝试增加实际运行时而不是编译器的最大允许堆大小。

        一般只要增加或增加类似下面的参数值就可以了,其中 com.mycompany.MyProgram 最多可以使用 1G 的堆内存:

        java -Xmx1024m com.mycompany.MyProgram
        

        【讨论】:

          猜你喜欢
          • 2019-01-23
          • 2011-03-25
          • 2016-11-26
          • 2014-07-13
          • 1970-01-01
          • 2016-11-17
          • 2011-01-14
          • 1970-01-01
          • 2020-11-12
          相关资源
          最近更新 更多