我有一个java程序在centos Box中运行。 我的 -Xmx 和 -Xms 设置为 4000 Mb。
The program works fine.
但是当我执行 free -m 时,已用内存显示为 506 MB。根据我的理解,XMS 内存应该为 JVM 保留。为什么 free 命令不显示 java 使用的内存?
我还做了 jstat -gccapacity $(pidof java) 并且 NGCMN 和 NGCMX 已更新并且具有相同的值? 任何支持都会有帮助。 我正在运行我的程序 java -Xms41000m -Xmx42000m -jar
最佳答案
即使-Xmx
和-Xms
设置为相同的值,为Java堆保留的空间也不会立即在RAM中分配。
操作系统通常仅在第一次访问虚拟页面时才延迟分配物理内存。因此,虽然 Java 堆中未使用的部分没有被触及,但它不会真正消耗内存。
您可以使用-XX:+AlwaysPreTouch
选项强制触摸JVM启动时的所有堆页。
关于Java堆Xms和linux空闲内存不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57387882/