Java 堆 Xms 和 linux 空闲内存不同

Java heap Xms and linux free memory different

我在 centos Box 中有一个 java 程序 运行。 我的 -Xmx 和 -Xms 设置为 4000 Mb。

The program works fine.

但是当我执行 free -m 时,已用内存显示为 506 MB。按照我的理解,XMS内存应该留给JVM使用。Why does free command not showing the java used memory ?

我也完成了 jstat -gccapacity $(pidof java) 并且 NGCMN 和 NGCMX 更新并具有相同的值? 任何支持都会有所帮助。 我是 运行 我的程序 java -Xms41000m -Xmx42000m -jar

即使 -Xmx-Xms 设置为相同的值,为 Java 堆保留的 space 也不会立即在 RAM 中分配。

操作系统通常延迟分配物理内存,仅在第一次访问虚拟页面时分配。因此,虽然 Java 堆未使用的部分未被触及,但它不会真正消耗内存。

您可以使用 -XX:+AlwaysPreTouch 选项在 JVM 启动时强制访问所有堆页面。