MemoryMXBean.getHeapMemoryUsage()
我有一个运行-Xms512m -Xmx512m的jvm进程,下面显示了此进程的MemoryMXBean.getHeapMemoryUsage():
init = 512M
used = 105M
comitted = 491M
max = 491M
MemoryMXBean.getNonHeapMemoryUsage()
此过程的MemoryMXBean.getNonHeapMemoryUsage():
init = 2M
used = 25M
comitted = 25M
max = 0M
-Xms
我曾经认为初始堆大小是jvm启动时jvm实际上将从操作系统分配多少内存,但事实证明这是错误的。
顶部显示该jvm的RES接近150m,但是jvm是使用-Xms512M运行的。
total memory a jvm used = used of MemoryMXBean.getHeapMemoryUsage()
+ used of MemoryMXBean.getNonHeapMemoryUsage()
+ the direct memory we used in application level
任何事情将不胜感激!
最佳答案
为什么最大为491M(我希望是512M)?max
中不计入一个幸存者空间,因为其中一个幸存者空间始终为空。
另请参见this answer。
非堆(使用它)是什么意思?MemoryMXBean
将以下JVM内存池计为“非堆”:
另请参见this question。
-Xms(初始堆大小)是什么意思?
是的,这是初始堆大小。操作系统延迟(在第一次访问时)在物理内存中分配页面。这就是RSS可以小于总提交大小的原因。
有关详细信息,请参见this answer。
以下公式正确吗
不。事情要复杂得多。我已经在this answer中对此进行了详细说明。
关于java - 如何理解java.lang.management.MemoryMXBean和-Xms?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54210134/