提问人:SyBer 提问时间:3/28/2010 最后编辑:trincotSyBer 更新时间:7/31/2021 访问量:55395
Java -Xms 初始大小效果
Java -Xms initial size effects
问:
设置 -Xms 参数有什么好处,例如,让初始内存更大,然后是默认计算的内存(在我的情况下为 64 MB,根据 Java GC tunning: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html#par_gc.ergonomics.default_size)?
另外,将初始和最大内存设置为相同的大小有什么好处吗?
谢谢。
答:
这样做的好处是,当您用完足够多的堆而必须调整其大小时,性能会受到损失。如果您最初将其设置为 64MB,但事实证明您的应用程序在负载下需要 250MB,当您达到接近 64MB 时,JVM 将分配更多的堆空间,并可能在一些对象周围移动并执行其他簿记。这当然需要时间。
当应用程序处于负载状态时,您希望所有资源都专用于使其运行,因此这种额外的工作可能会使应用程序的响应速度变慢,甚至在某些情况下,如果在调整堆大小之前内存不足,它也会崩溃。
有时,在使用 Java 应用程序时,您会看到诸如“设置和设置为相同值”之类的说明。这样做是为了完全避免调整大小,以便您的应用程序在启动时其堆已经与以往一样大。Xms
Xmx
评论
链接的文章解释得很清楚:
默认值:-Xms 3670k -Xmx 64分钟 [...] 大 服务器应用程序经常遇到 这些默认值有两个问题。一 启动缓慢,因为初始 堆很小,必须调整大小 许多主要收藏品。一个 更多 紧迫的问题是默认 最大堆大小不合理 对于大多数服务器应用程序来说,体积较小。 服务器的经验法则 应用包括:
- 除非你有问题 暂停,尝试授予尽可能多的内存 尽可能添加到虚拟机。 默认大小 (64MB) 通常也是如此 小。
- 将 -Xms 和 -Xmx 设置为 相同的值可提高可预测性 通过删除最重要的 来自虚拟的规模决策 机器。但是,虚拟 然后机器无法补偿 如果你做了一个糟糕的选择。
- 一般来说,增加内存 增加处理器的数量, 由于分配可以是 并行。
您也可以对这个问题的讨论感兴趣。
如果应用程序需要超过 64 MB 的堆内存是正常的,则将 Xms 设置为更大的值应该会在一定程度上提高应用程序的性能,因为 VM 不必多次请求额外的内存。
在生产系统中,我认为将 Xms 和 Xmx 设置为相同的值是明智的。它基本上是在说“这是 VM 可以获得的堆内存量,我马上就把它奉献出来”。
设置 -Xms 参数有什么好处,例如,初始内存更大,然后是默认计算的内存
如果初始堆很小,并且必须在许多主要集合上调整大小,则启动速度会很慢。
另外,将初始和最大内存设置为相同的大小有什么好处吗?
将 和设置为相同的值可为您提供可预测性。在性能调优期间调整 JVM 的大小时,这一点尤为重要。但是JVM无法弥补任何错误的决定。-Xms
-Xmx
我倾向于对生产服务器使用相同的值(在性能测试期间进行了调整)。
评论
下一个:JVM 卡住了几秒钟到几小时
评论