【问题标题】:Increase heap size in Java在 Java 中增加堆大小
【发布时间】:2010-12-06 15:04:47
【问题描述】:

我正在使用具有 8 GB RAM 的 Windows 2003 服务器(64 位)。如何增加堆内存最大值?我正在使用-Xmx1500m 标志将堆大小增加到 1500 Mb。我可以将堆内存增加到物理内存的 75%(6 GB 堆)吗?

【问题讨论】:

  • 你试过-Xmx6g 吗?这没有用吗?你观察到了什么?
  • 我想你尝试增加堆但失败了?您使用的是 64 位 JVM?
  • 感谢您的评论,但这不起作用
  • 嗯 - 你怎么知道它不起作用? JVM没有启动吗?

标签: java heap-memory


【解决方案1】:

您可以在32 位系统上增加到2GB。如果您使用的是 64 位系统,则可以更高。如果你选错了不用担心,如果你在 32 位系统上要求 5g,java 会抱怨一个无效的值并退出。

正如其他人发布的那样,使用命令行标志 - 例如

java -Xmx6g myprogram

你可以通过输入 java -X 来获得一个完整的列表(或几乎完整的列表)。

【讨论】:

  • 根据我的经验,Java 将接受使用 32b 虚拟机(在 32b 或 64b 系统上——此处虚拟机是重要部分)的实际堆大小约为 2G。此外,惊讶的提问者并没有首先搜索并找到:stackoverflow.com/questions/1596009/… 和:stackoverflow.com/questions/37335/…
  • 啊,你当然是对的——在 32 位系统上,你只能寻址 2 Gb 的内存。
  • 最大堆和最小堆大小是否必须相同?
  • 没有。但人们通常这样做是因为 JVM 永远不会浪费时间调整大小。怀疑这很重要,TBH。
  • @PhilipRego 您可以将其设置为您想要的任何值,直到 JVM 可以解决的限制。 -Xmx2G 将您的内存设置为 2G(另请查看 -Xms)。这并没有说明您需要多少内存。
【解决方案2】:

可以使用命令行选项增加 JVM 分配的堆大小 这里我们有 3 个选项

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

在上面一行中,我们可以将最小堆设置为 16mb,最大堆设置为 64mb

【讨论】:

    【解决方案3】:

    在 32 位 JVM 上,理论上可以设置的最大堆大小为 4gb。要使用更大的堆大小,您需要使用 64 位 JVM。请尝试以下操作:

    java -Xmx6144M -d64

    -d64 标志很重要,因为它告诉 JVM 在 64 位模式下运行。

    【讨论】:

    • 谢谢老板,但它在我的系统中无法正常工作,还有一些我遗漏的东西
    • 定义“不工作”。它不会启动并给您一个错误吗?它是否启动但使用不同的堆大小?
    【解决方案4】:

    您可以通过传递 JVM 参数 -Xms-Xmx 来增加堆大小,如下所示:

    对于 Jar 文件:

    java -jar -Xms4096M -Xmx6144M jarFilePath.jar
    

    对于 Java 文件:

     java -Xms4096M -Xmx6144M ClassName
    

    上述参数将 InitialHeapSize (-Xms) 增加到 4GB (4096 MB) 和 MaxHeapSize(-Xmx) 到 6GB (6144 MB)。

    但是,Young Generation Heap Size 将保持不变,并且额外的 HeapSize 将添加到 Old Generation Heap Size。要使年轻代堆和老代堆的大小相等,请使用 -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy 参数。

    java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar
    

    -XX:NewRatio = Old Gen Heap Size : Young Gen HeapSize(你可以使用这个比率来获得你想要的比率)。

    【讨论】:

      【解决方案5】:

      可以直接在eclipse中增加JVM分配的堆大小 在 Eclipse IDE 中转到

      运行---->运行配置---->参数

      输入-Xmx1g(用于设置最大尺寸,如Xmx256m或Xmx1g...... m-->mb g--->gb)

      【讨论】:

      • 只是添加这应该是一个VM参数(eclipse给你两个选项)。
      【解决方案6】:

      java -d64 -Xms512m -Xmx4g HelloWorld

      在哪里, -d64:将启用 64 位 JVM -Xms512m:将初始堆大小设置为 512 MB -Xmx4g:将最大堆大小设置为 4 GB (这里的java文件名是:HelloWorld.java)

      【讨论】:

        【解决方案7】:

        我可以将堆内存增加到 75% 物理内存(6GB 堆)。

        是的,你可以。事实上,如果你愿意,你可以增加超过物理内存的数量。

        这样做是否是一个好主意取决于您的系统上运行了多少其他内容。特别是,如果当前运行的应用程序和服务的“工作集”大大超过了可用的物理内存,您的系统很容易“崩溃”,花费大量时间将虚拟内存页面移入和移出磁盘。最终结果是系统变得非常缓慢。

        【讨论】:

        • 感谢您的评论,但是我怎样才能增加。请您给命令。
        • 试试 -Xmx6000m。如果您使用的是 64 位版本的 Java,它应该可以工作。
        • 您确定您运行的是 64 位版本的 Java 吗?在 64 位操作系统上?
        【解决方案8】:

        请使用以下命令将堆大小更改为 6GB

        export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
        

        【讨论】:

        • 如果我的系统中有 8G 内存并且我可以从任务管理器中看到始终有 70% 的内存在使用;这可以为java堆大小分配6G内存吗?
        • @Reihan_amn 是的,不,如果你超出了你的内存,它将进入分页,它在磁盘上并且非常慢。如果您超出了页面文件,那么您的时间就很糟糕了。
        【解决方案9】:

        有几个人用-Xms-Xms的jvm选项指出了堆大小的具体答案。我想指出,这不是 jvm 唯一的内存选项类型。具体来说,如果您是通过流获得堆栈,那么您将希望通过添加像-Xss8m 这样的附加选项来增加堆栈的大小。

        对于这个问题,-Xms2g -Xmx6g -Xss8m 之类的 jvm 选项将是一个解决方案。

        我正在分享这些信息,因为我的 google 搜索如何增加 jvm 内存将我带到了这个解决方案,并且这些解决方案不适用于大量内存分配。一旦我弄清楚了具体设置的用途,我就可以用谷歌搜索如何增加堆栈大小并找到丢失的参数。 :) 希望这可以节省其他人的时间,因为它会为我节省大量时间。 :)

        【讨论】:

          【解决方案10】:

          这仅适用于 64 位版本的 Java。转到控制面板并单击 Java 图标。在Java控制面板的小窗口中,点击Java菜单栏,然后​​点击view按钮。

          如果您有两个 Java 平台,请禁用以前版本的 Java,然后单击 运行时参数 文本字段并写入 -Xmx1024m 或小于 RAM 大小。不要将堆大小增加到等于 RAM,否则您的系统会崩溃。

          【讨论】:

          • 如果使堆大小等于 RAM,系统不会崩溃。取而代之的是,系统将开始分页并变得又好又慢。
          【解决方案11】:

          是的。你可以。

          您可以将堆内存增加到物理内存的 75%(6 GB 堆)或更高。

          由于您使用的是 64 位,因此您可以将堆大小增加到所需的数量。如果您使用的是 32 位,则限制为 4GB。

          $ java -Xms512m -Xmx6144m JavaApplication
          

          将初始堆大小设置为 512mb,将最大堆大小设置为 6GB。

          希望对你有帮助.. :)

          【讨论】:

          • 这似乎与几年前发布的两个投票最多的答案非常相似。
          【解决方案12】:

          我在使用 eclipse/STS 在我的 java 代码中运行 py 文件时遇到问题,由于 jvm 堆内存不足而出现 PyException。我已经完成了如下所述的更改,并且能够解决此问题。以下是我的系统配置。

          这些是我在工作区中所做的更改,瞧,它现在运行完美。

          【讨论】:

            【解决方案13】:

            如果有人想知道如何在 Windows 中执行此操作,请按以下步骤操作。

            【讨论】:

              猜你喜欢
              • 2012-12-07
              • 2013-01-26
              • 2022-11-21
              • 2012-07-14
              • 2012-01-29
              • 1970-01-01
              • 2012-09-20
              • 2010-10-27
              相关资源
              最近更新 更多