【问题标题】:Is there a maximum number you can set Xmx to when trying to increase jvm memory?尝试增加 jvm 内存时,您可以将 Xmx 设置为最大数量吗?
【发布时间】:2009-01-20 13:17:36
【问题描述】:

有最大值吗?您可以将 Xmx 设置为的大小?我将它设置为 1024m 并且 Eclipse 可以正常打开。当我将其设置为 1024 以上时,eclipse 无法打开,并且出现错误“jvm 已终止。退出代码=-1”...

我这样做是因为我不断收到“java.lang.OutOfMemoryError: Java heap space”。我正在读取一个 35.5Mb 的 .txt 文件,当它只是使用“while((line = reader.readLine()) != null)”循环读取文件时会发生此错误。我原以为1024mb就足够了。谁能帮帮我?

【问题讨论】:

  • 你能发布文件读取方法的代码吗?你一定是做错了什么;)
  • nickolai 提出了一个很好的建议(运行配置),Richie_W 也提出了一个很好的建议(一定是做错了 - 文件 > 1G 吗?)。
  • 尝试这些设置 (stackoverflow.com/questions/142357/…) 并尝试使用 JConsole 关注您的应用程序
  • 文件只有35.5Mb。

标签: java eclipse jvm


【解决方案1】:

是的,有一个最大值,但它取决于系统。试试看,加倍直到达到极限,然后向下搜索。至少对于 Linux 上的 Sun JRE 1.6,如果不总是提供信息丰富的错误消息,您会得到有趣的信息(peregrino 是运行 32 位 ubuntu 的上网本,具有 2G RAM 并且没有交换):

peregrino:$ java -Xmx4096M -cp bin WheelPrimes 
Invalid maximum heap size: -Xmx4096M
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.

peregrino:$ java -Xmx4095M -cp bin WheelPrimes 
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified

peregrino:$ java -Xmx4092M -cp bin WheelPrimes 
Error occurred during initialization of VM
The size of the object heap + VM data exceeds the maximum representable size

peregrino:$ java -Xmx4000M -cp bin WheelPrimes 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

(experiment reducing from 4000M until)

peregrino:$ java -Xmx2686M -cp bin WheelPrimes 
(normal execution)

大多数都是不言自明的,除了 -Xmx4095M 这很奇怪(可能是有符号/无符号比较?),它声称在没有交换的 2GB 机器上保留 2686M。但它确实暗示了 32 位 VM 的最大大小是 4G 而不是 2G,如果操作系统允许您处理那么多的话。

【讨论】:

  • -Xmx117000000M (117TB) 在 16GB 内存、64 位 JVM、Java 8、Oracle JDK 2022-02 的 MacBookPro 上没有出错。 -Xmx118000000M 出错了。对于我的带有 openjdk 和 8GB ram 且没有交换的 Linux aws 实例,-Xmx236000M (236GB) 没有出错,但 -Xmx237000M 出错了。
【解决方案2】:

我认为 32 位 JVM 最多有 2GB 内存。不过这可能已经过时了。如果我理解正确,您可以在 Eclipse 启动器上设置 -Xmx。如果您想增加从 Eclipse 运行的程序的内存,您应该在“运行->运行配置...”中定义 -Xmx(选择您的类并打开“参数”选项卡,将其放在 VM 参数区域)菜单,而不是在 Eclipse 启动时

编辑:您要求的详细信息。 在 Eclipse 3.4 中

  1. 运行->运行配置...

  2. 如果你的类没有在“Java Application”子树左侧的列表中列出,点击左上角的“New Launch configuration”

  3. 在右侧,“Main”选项卡确保项目和类是正确的

  4. 选择右侧的“参数”选项卡。 这个有两个文本区域。一个是用于进入提供给您的 main 方法的 args[] 数组的程序参数。另一个用于 VM 参数。将以下内容放入带有 VM 参数(下一个 iirc)的那个:
    -Xmx2048m

    我认为 1024m 应该足以满足您的需求!

  5. 点击应用,然后点击运行

  6. 应该工作:)

【讨论】:

    【解决方案3】:

    查看this 了解设置Java 堆时的一些常见错误。您可能已将堆大小设置为大于计算机物理内存的值。

    您应该通过增加堆大小来避免解决此问题。相反,您应该分析您的应用程序,以查看您在哪里花费了如此大量的内存。

    【讨论】:

      【解决方案4】:

      我认为它大约是 2GB。虽然 Pete Kirkham 的回答非常有趣并且可能是正确的,但我已经毫无错误地分配了 3GB 以上的空间,但实际上它并没有使用 3GB。这或许可以解释为什么您能够在没有交换空间的情况下在 2GB RAM 上分配 2.5GB。实际上,它并没有使用 2.5GB。

      【讨论】:

        猜你喜欢
        • 2011-02-20
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 2010-12-02
        相关资源
        最近更新 更多