JVM 堆参数

2022-08-31 15:00:01

在阅读了已经提出的关于该主题的问题和大量的谷歌搜索之后,我仍然无法清楚地了解-Xms选项

我的问题是:和 有什么区别?java -Xms=512m -Xmx=512mjava -Xms=64m -Xmx=512m

现在我有以下答案:

唯一的区别是在应用程序运行期间将运行的垃圾回收数和内存分配数。我说的对吗?

以下是我回答这个答案的原因:

将该选项设置为 不会导致我的应用程序在启动后实际使用物理内存。我想这与现代操作系统虚拟内存管理和懒惰页面分配有关。(我注意到设置为或设置为“或”在Linux上由top或Windows上的任务管理器报告的初始已用内存根本没有变化)-Xms512m512M-Xms512M64M

有人可以帮助我了解此选项的影响或指向有助于我理解它的链接吗?Xms

提前致谢

马努


答案 1

JVM 将从初始堆级别的内存使用开始。如果 maxheap 较高,则当内存要求超过其当前内存时,它将增长到 maxheap 大小。

所以

  • -Xms512m -Xmx512m

JVM 从 512 M 开始,从不调整大小。

  • -Xms64m -Xmx512m

JVM从64M开始,如果mem增长(最大上限为512)。要求超过 64。


答案 2

总结链接后找到的信息:JVM 分配 -Xms 指定的量,但操作系统通常不会分配实际页面,直到需要它们。因此,JVM 按照 Xms 的指定分配虚拟内存,但仅根据需要分配物理内存。

您可以通过使用 Sysinternals 的 Process Explorer 而不是 Windows 上的任务管理器来查看这一点。

因此,使用 -Xms64M 和 -Xms512M 之间存在真正的区别。但我认为最重要的区别是你已经指出的:如果你真的需要512MB,但只从64MB开始,垃圾回收器将运行得更频繁。


推荐