代码之家  ›  专栏  ›  技术社区  ›  erotsppa

如何设置JVM的最大内存使用量?

  •  114
  • erotsppa  · 技术社区  · 15 年前

    我想限制JVM使用的最大内存。注意,这不仅仅是堆,我想限制这个进程使用的总内存。

    5 回复  |  直到 8 年前
        1
  •  93
  •   Erik Kaplun    11 年前

    使用参数 -Xms<memory> -Xmx<memory> . 使用 M G 后面的数字分别表示兆字节和千兆字节。 -Xms 表示最小值和 -Xmx 最大值。

        2
  •  28
  •   jjnguy Julien Chastang    15 年前

    您不必担心堆栈泄漏内存(这是非常罕见的)。唯一能让堆栈失控的时间是使用无限(或非常深)递归。

    这只是堆。很抱歉,一开始没有完全阅读你的问题。

    您需要使用以下命令行参数运行JVM。

    -Xmx<ammount of memory>
    

    例子:

    -Xmx1024m
    

    这将允许JVM的最大内存为1GB。

        3
  •  12
  •   vsingh    12 年前

    如果要限制JVM的内存(而不是堆大小) ULIMIT -V

    要了解JVM和堆内存之间的区别,请看这篇优秀的文章 http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html

        4
  •  9
  •   SmoothieMonster    15 年前

    上面的答案是正确的,不能优雅地控制Java进程分配多少本地内存。这取决于您的应用程序在做什么。

    也就是说,根据平台,您可能可以使用一些机制,例如ULIMIT来限制Java或任何其他进程的大小。

    如果达到了这个极限,就不要指望它会优雅地失败。本地内存分配失败要比Java堆上的分配失败更难处理。应用程序很有可能会崩溃,但这取决于保持流程大小(可能仍然适合您)对系统有多重要。

        5
  •  0
  •   Mario Trucco    8 年前

    nativeHeap可以增加-xx:maxdirectmemorysize=256M (默认值为128)

    我从来没有用过。也许你会发现它很有用。