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
-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
任何事情都将不胜感激!
答案 0 :(得分:1)
为什么最大为491M(我希望是512M)?
max
中未计入一个幸存者空间,因为其中一个幸存者空间始终为空。
另请参见this answer。
不使用堆的人是什么意思?
MemoryMXBean
将以下JVM内存池计为“非堆”:
另请参阅this question。
-Xms(初始堆大小)是什么意思?
是的,它是初始堆大小。操作系统延迟(在第一次访问时)在物理内存中分配页面。这就是RSS可以小于总提交大小的原因。
有关详细信息,请参见this answer。
下面的公式正确吗
不。事情要复杂得多。我已经在this answer中对此进行了详细说明。