设置-Xms参数有什么好处,例如,初始内存较大,那么默认计算一个(根据Java GC调整,在我的情况下是64 MB): http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html#par_gc.ergonomics.default_size)?
另外,将初始和最大内存设置为相同大小有什么好处吗?
感谢。
答案 0 :(得分:32)
这样做的好处是,当您耗尽足够的堆时必须调整大小,从而降低性能。如果你最初将它设置为64MB,但事实证明你的应用程序需要250MB,当你接近64MB时,JVM将分配更多的堆空间,并可能移动一些对象并进行其他簿记。这当然需要时间。
当您的应用程序处于负载状态时,您需要专用于使其运行的所有资源,因此这项额外的工作可能会使应用程序响应变慢,甚至在某些情况下,如果在堆之前内存不足,它可能会崩溃调整大小。
有时使用Java应用时,您会看到“将Xms
和Xmx
设置为相同值”等说明。这样做是为了避免完全调整大小,以便您的应用程序启动时其堆已经尽可能大。
答案 1 :(得分:6)
链接的文章解释得很清楚:
默认值:-Xms 3670k -Xmx 64米 [...] 大 服务器应用经常体验 这些默认值有两个问题。一 是慢启动,因为最初 堆很小,必须调整大小 许多主要收藏品。更多 紧迫的问题是默认 最大堆大小是不合理的 适用于大多数服 服务器的经验法则 应用程序是:
您也可能对此问题的this discussion感兴趣。
答案 2 :(得分:4)
设置-Xms参数有什么好处,例如初始内存较大,那么默认计算一个
如果初始堆很小并且必须在许多主要集合上调整大小,则启动将很慢。
另外,将初始和最大内存设置为相同大小有什么好处吗?
将-Xms
和-Xmx
设置为相同的值可以提供可预测性。在性能调整期间调整JVM大小时,这一点尤其重要。但是JVM无法弥补任何错误的决定。
我倾向于为生产服务器使用相同的值(在性能测试期间进行调整)。
答案 3 :(得分:3)
如果您的应用程序需要超过64 MB的堆内存是正常的,那么将Xms设置为更大的值会稍微提高应用程序的性能,因为VM不必多次请求额外的内存。
在生产系统中,我考虑将Xms和Xmx设置为相同的值。它基本上是在说“这是VM可以获得的堆内存量,而且我会立即投入使用它。”