代码之家  ›  专栏  ›  技术社区  ›  C. Ross trotttrotttrott

正在启动JVM的内存分配

  •  2
  • C. Ross trotttrotttrott  · 技术社区  · 16 年前

    我开始使用 -Xmx 上的选项 java 命令允许我的进程使用更多的内存(256Mb,但我认为我目前使用的内存不足128Mb)。我也注意到 -Xms


    Reference: Java

    4 回复  |  直到 6 年前
        1
  •  8
  •   DontDivideByZero radai    11 年前

    -Xmx 参数定义堆对于JVM可以达到的最大内存大小。您必须很好地了解您的程序,了解它在加载时的性能,并相应地设置此参数。低值会导致 OutOfMemoryException 或者如果程序的堆内存达到最大堆大小,则性能非常差。如果您的程序在专用服务器上运行,您可以将此参数设置得更高,因为它不会影响其他程序。

    -Xms

    对于服务器端Java应用程序(如Resin)来说,设置最小值是一种很好的做法 最大值 堆大小相同。 您可以设置为256或512Mb。

        2
  •  7
  •   C. Ross trotttrotttrott    13 年前

    堆大小应该是“合适”的,但要找到合适的堆大小并不容易。如果它太小,则会耗尽内存;如果太大,则会浪费内存,并且会有GC长时间暂停的风险。当事情出错(而且总是出错)时,您拥有的堆越多,您需要调试的堆就越多,任何泄漏出现的时间也就越长。

    理想情况下我会 -Xms -Xmx 大于此值(但不要太大)。始终打开详细的垃圾收集,并用图表显示正在使用的堆,以检查已设置的值。

    也就是说对于32位Windows -Xms公司 -Xmx公司 这是因为Java(撇开jrockit不谈)需要连续的内存,而Windows的内存映射是碎片化的,因此尽早获取并锁定堆是值得的。

        3
  •  2
  •   Mike Thomsen    16 年前

    Xmx是内存池的上限。Xms是初始大小。仅此而已。每个应用程序的适当大小取决于应用程序的复杂性。将初始大小设置为高于2mb的主要优点是JVM从操作系统请求更多内存的时间更少。如果您设置了256mb的上限,那么32mb-64mb的初始大小对于大多数企业应用程序来说并不是不合理的。

    http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html

        4
  •  1
  •   OscarRyz    16 年前

    我应该将此值设置为什么?为什么?

    当然取决于你的申请。

    如果您知道您的应用程序最初消耗的内存高达64mb,那么使用默认值(2mb)将使VM请求内存多次达到64mb。这些内存请求会使您的应用程序慢一点,因为在VM请求更多空间之前,垃圾收集器可能会多次运行以释放空间。

    如果您已经知道将使用astart64mb,请使用 -Xms

    如果您正在消耗128mb的内存,并且有足够的可用内存,则可以使用 java -Xms128m 也不用担心长时间需要更多的内存。

    推荐文章