Java 为什么需要-Xms?

Java 为什么需要-Xms?,java,memory,Java,Memory,我知道,-Xms和-Xmx用于指定java程序的最小和最大堆大小。 根据我的理解,如果我们不指定任何选项,JVM都可以工作,即堆大小可以由JVM自己管理 所以,如果我们想限制最大堆大小,我们应该使用-Xmx,这没关系,现在我的问题是,为什么有人需要限制堆的最小大小,因为JVM可以很好地管理它 为什么需要-Xms?JVM内存在-Xms和-Xmx参数范围内根据需要增长。-Xms和-Xmx之间的区别除了最小和最大堆大小范围之外是:-Xms的内存量(如果可用)将由操作系统立即分配给您的应用程序,但-Xm

我知道,
-Xms
-Xmx
用于指定java程序的最小和最大
堆大小。
根据我的理解,如果我们不指定任何选项,JVM都可以工作,即堆大小可以由JVM自己管理

所以,如果我们想限制最大堆大小,我们应该使用
-Xmx
,这没关系,现在我的问题是,为什么有人需要限制堆的最小大小,因为JVM可以很好地管理它


为什么需要
-Xms

JVM内存在-Xms和-Xmx参数范围内根据需要增长。-Xms和-Xmx之间的区别除了最小和最大堆大小范围之外是:-Xms的内存量(如果可用)将由操作系统立即分配给您的应用程序,但-Xmx将被视为一个请求,并在需要时提供该限制


每个应用程序都需要一些最小的内存来启动并在正常情况下工作。如果应用程序开发人员能够评估这一点,那么指定-Xms是有意义的。预先拥有足够的所需内存可以减少堆从一个值增长到另一个值的开销。

您可以通过设置更大的最小堆大小来减少垃圾收集周期。这对长时间运行的程序没有太大影响,但短时间运行的程序可以从中受益


JVM将初始堆大小设置为最大堆大小的某个值,然后在使用的内存超过某个阈值时增长堆并执行(主要是较小的)GC运行。因此,当使用
-Xms
设置初始堆大小(然后在JVM启动时立即分配)时,您可以避免这些堆增长周期。

指定-Xms是否会加快启动速度?这与性能有关吗?@Batty是的,每当内存增长时,无论是操作系统还是JVM,都会有一定的开销。