Java -Xms初始大小效果

时间:2010-03-28 08:41:15

标签: java memory garbage-collection heap

设置-Xms参数有什么好处,例如,初始内存较大,那么默认计算一个(根据Java GC调整,在我的情况下是64 MB): http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html#par_gc.ergonomics.default_size)?

另外,将初始和最大内存设置为相同大小有什么好处吗?

感谢。

4 个答案:

答案 0 :(得分:32)

这样做的好处是,当您耗尽足够的堆时必须调整大小,从而降低性能。如果你最初将它设置为64MB,但事实证明你的应用程序需要250MB,当你接近64MB时,JVM将分配更多的堆空间,并可能移动一些对象并进行其他簿记。这当然需要时间。

当您的应用程序处于负载状态时,您需要专用于使其运行的所有资源,因此这项额外的工作可能会使应用程序响应变慢,甚至在某些情况下,如果在堆之前内存不足,它可能会崩溃调整大小。

有时使用Java应用时,您会看到“将XmsXmx设置为相同值”等说明。这样做是为了避免完全调整大小,以便您的应用程序启动时其堆已经尽可能大。

答案 1 :(得分:6)

链接的文章解释得很清楚:

  

默认值:-Xms 3670k   -Xmx 64米    [...]   大   服务器应用经常体验   这些默认值有两个问题。一   是慢启动,因为最初   堆很小,必须调整大小   许多主要收藏品。更多   紧迫的问题是默认   最大堆大小是不合理的   适用于大多数服   服务器的经验法则   应用程序是:

  1. 除非你有问题 暂停,尝试给予尽可能多的记忆 尽可能虚拟机。 默认大小(64MB)通常也是如此 小。
  2. 将-Xms和-Xmx设置为 相同的值增加了可预测性 通过删除最重要的 从虚拟中确定决策大小 机。但是,虚拟 然后机器无法补偿 如果你选择不好
  3. 一般来说,像你一样增加记忆力 增加处理器数量, 既然分配可以 并行化。
  4. 您也可能对此问题的this discussion感兴趣。

答案 2 :(得分:4)

  

设置-Xms参数有什么好处,例如初始内存较大,那么默认计算一个

如果初始堆很小并且必须在许多主要集合上调整大小,则启动将很慢。

  

另外,将初始和最大内存设置为相同大小有什么好处吗?

-Xms-Xmx设置为相同的值可以提供可预测性。在性能调整期间调整JVM大小时,这一点尤其重要。但是JVM无法弥补任何错误的决定。

我倾向于为生产服务器使用相同的值(在性能测试期间进行调整)。

答案 3 :(得分:3)

如果您的应用程序需要超过64 MB的堆内存是正常的,那么将Xms设置为更大的值会稍微提高应用程序的性能,因为VM不必多次请求额外的内存。

在生产系统中,我考虑将Xms和Xmx设置为相同的值。它基本上是在说“这是VM可以获得的堆内存量,而且我会立即投入使用它。”