我知道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/