我理解这一点,-Xms
并-Xmx
用于指定heap size
java 程序的最小值和最大值。根据我的理解,如果我们不指定任何选项,JVM 可以工作,即堆大小可以由 JVM 本身管理。
所以,如果我们想限制最大堆大小,我们应该使用-Xmx
,这没关系,现在我的问题是,为什么有人需要限制堆的最小大小,因为它可以由 JVM 很好地管理。
为什么-Xms
需要?
您可以通过设置更大的最小堆大小来减少垃圾回收周期。这对长时间运行的程序没有太大的影响,但短期运行的东西可以从中受益。
JVM 将初始堆大小设置为最大堆大小的某个量,然后增大堆并在使用的内存超过某个阈值时执行(主要是次要的)GC 运行。因此,在设置初始堆大小时-Xms
(然后在 JVM 启动时立即分配),您可以避免这些堆增长周期。
JVM 内存在 -Xms 和 -Xmx 参数的范围内按需增长。-Xms 和 -Xmx 之间的区别除了是最小和最大堆大小范围之外:-Xms 内存量(如果可用)将由操作系统立即分配给您的应用程序,但 -Xmx 将被视为已接受的请求,并将在需要时提供该限制。
每个应用程序都需要一些最低限度的内存才能在正常情况下启动和工作。如果应用程序开发人员能够评估,那么指定 -Xms 是有意义的。预先拥有足够的所需内存可以减少将堆从一个值增长到另一个值的开销。