【问题标题】:Increase heap size in Java增加 Java 中的堆大小
【发布时间】:2022-11-21 01:47:08
【问题描述】:

我正在使用 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 将抱怨无效值并退出。

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

java -Xmx6g myprogram

您可以通过键入 java -X 获得完整列表(或几乎完整的列表)。

【讨论】:

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

可以使用以下命令行选项增加 JVM 分配的堆大小:

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

在以下示例中,最小堆大小设置为 16mb,最大为 64mb:

java -Xms16m -Xmx64m ClassName

【讨论】:

    【解决方案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
    

    上述参数增加了初始堆大小 (-Xms)到 4GB (4096 MB) 和最大堆大小(-Xmx)到 6GB(6144MB)。

    但是,年轻一代堆大小将保持不变,额外的堆大小将添加到老一辈堆大小。至均衡 Young Gen Heap 和 Old Gen Heap 的大小, 利用-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】:

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

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

        【讨论】:

        • 如果我的系统中有 8G 内存,并且我可以从任务管理器中看到其中的 70% 一直在使用;是否可以将 6G 内存分配给 java 堆大小?
        • @Reihan_amn 是也不是,如果你超出你的内存,它会转到分页,它在磁盘上并且速度非常慢。如果您超过了页面文件,那么您的时间就很糟糕了。
        • 如果使用这个 export cmd.... 那么默认情况下任何 java 程序都会被限制为 6Gb,除非在 java 调用中指定了 -Xm* 值吗?
        【解决方案8】:

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

        是的你可以。事实上,如果您愿意,您可以增加到比物理内存更多的数量。

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

        【讨论】:

        • 感谢您的评论但是我怎样才能增加。请您下达命令。
        • 试试-Xmx6000m。如果您使用的是 64 位版本的 Java,它应该可以工作。
        • 您确定您运行的是 64 位版本的 Java 吗?在 64 位操作系统上?
        【解决方案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
              • 2010-12-06
              • 2012-07-14
              • 2012-09-20
              • 2010-10-27
              • 2012-01-29
              • 1970-01-01
              相关资源
              最近更新 更多