我知道JVM进程的-Xms标志是为了允许JVM进程使用特定数量的内存来初始化其进程。并且关于Java应用程序的性能,通常建议在启动应用程序时为-Xms-Xmx设置相同的值,例如-Xms2048M -Xmx2048M

我很好奇-Xms-Xmx标志是否意味着JVM进程保留了特定内存量,以防止同一台计算机上的其他进程使用它。

这是正确的吗?

最佳答案

Xmx仅保留虚拟地址空间。Xms实际上分配(提交)它,但不一定会对其进行预故障处理。

操作系统对分配的响应方式各不相同。

Windows确实允许您保留很大的地址空间(Xmx)块,但不允许过量使用(Xms)。该限制由交换+物理定义。大页面是异常(exception)(需要使用组策略设置启用它),这将受到物理内存的限制。

Linux行为更为复杂,它取决于vm.overcommit_memory和相关的sysctls以及传递给mmap syscall的各种标志,这些标志在某种程度上可以由JVM配置标志控制。行为的范围可以是:a)Xms可能超过总RAM +交换到b)Xmx受可用物理RAM限制。

关于java - -Xms和-Xmx标志是否保留机器的资源?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43302720/

10-12 06:24