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