2010-03-28 182 views

回答

31

好处是,当您使用足够大的堆以使其必须调整大小时,会有性能损失。如果你将它初始设置为64MB,但你的负载应用程序需要250MB,当你点击64MB附近时,JVM将分配更多的堆空间并可能移动某些对象并做其他记录。这当然需要时间。

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

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

+0

根据您的经验,建议您将Xms设置为与Xmx相同的值? – SyBer 2010-03-28 09:10:19

+7

这取决于应用程序。如果您是一家为应用程序或一组应用程序提供专用服务器的金融机构,这很有道理。特别是因为处理市场订单的应用程序可能会处理100或1000条消息/秒,平均延迟为2-25毫秒。对于当时发送的所有订单而言,调整大小可能会使等待时间缩短5000%。你甚至可以下订单。 尽管如此,在您尝试优化之前,配置文件。 – Phil 2010-03-28 09:21:19

+0

应该注意的是,对于具有大量活动JVM的系统-Xms将增加平均JVM占用空间,而允许JVM自行管理其堆扩展允许使用内存占用空间收集方案。 – Xailor 2010-04-21 23:57:12

6

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

默认值:-Xms 3670k -Xmx64米 [...] 大 服务器应用程序经常经历 两个问题,这些默认值。其中一个 的启动速度很慢,因为初始的 堆很小,必须调整大小,超过 的很多主要集合。更多 紧迫的问题是,对于大多数服务器应用程序来说,默认的 最大堆大小是不合理的 小。 拇指服务器 应用规则是:

  1. 除非你有 暂停的问题,尝试将虚拟机给予尽可能多的内存 越好。 默认大小(64MB)往往太小 。
  2. 设置-Xms和-Xmx到 相同的值通过从虚拟 机器中删除最重要的尺寸决定来增加可预测性 。但是,如果您做出不好的选择,虚拟 机器将无法补偿 。
  3. 一般来说,增加内存时会增加处理器的数量, 因为可以并行分配 。

您还可能对this discussion感兴趣。

3

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

在生产系统中,我考虑将Xms和Xmx设置为相同的值。它基本上是这样说的:“这是虚拟机可以获得的堆内存量,并且我马上将它投入使用”。

3

什么是设置-Xms参数,以及具有该初始存储器例如更大的利益,那么默认计算的一个

如果初始堆小,并且必须被调整过许多重大收藏,创业将会变得缓慢。

此外,是否有任何好处来设置初始和最大的记忆到相同的大小?

将设置-Xms-Xmx设置为相同的值会给您带来可预测性。在性能调整期间调整JVM的大小时,这一点尤为重要。但是JVM将无法弥补任何不好的决定。

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

+0

你能提供你的想法stackoverflow.com/questions/39652282/...和stackoverflow.com/questions/39652282/...?提前致谢 – emilly 2016-09-23 05:42:10