MemoryMXBean.getHeapMemoryUsage()
我有一个使用 -Xms512m -Xmx512m 运行的 jvm 进程,下面显示了该进程的 MemoryMXBean.getHeapMemoryUsage() :
init = 512M
used = 105M
comitted = 491M
max = 491M
- 为什么最大是491M(我预计是512M)?
MemoryMXBean.getNonHeapMemoryUsage()此过程的MemoryMXBean.getNonHeapMemoryUsage():
init = 2M
used = 25M
comitted = 25M
max = 0M
- 非堆(谁使用它)是什么意思?什么样的内存会被计入这个非堆呢?我只知道我们在java代码中使用的直接内存不会(我说得对吗?)
-Xms
-Xms(初始堆大小)是什么意思?
我曾经认为初始堆大小是jvm启动时jvm实际从os分配多少内存,但事实证明是错误的。
顶部显示该 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)?
1 个幸存者空间不计入max
,因为幸存者空间之一始终是空的。
也可以看看这个答案 https://stackoverflow.com/a/27012218/3448419.
非堆(谁使用它)是什么意思?
MemoryMXBean
将以下 JVM 内存池计为“非堆”:
- 代码缓存(或代码堆)——用于编译方法和其他动态生成代码的区域;
- 元空间和压缩类空间 - 类元数据的区域。
也可以看看这个问题 https://stackoverflow.com/questions/39329455/java-non-heap-memory-analyzes.
-Xms(初始堆大小)是什么意思?
是的,这是初始堆大小。操作系统在物理内存中延迟分配页面(在第一次访问时)。这就是 RSS 可以小于总提交大小的原因。
See 这个答案 https://stackoverflow.com/a/31178912/3448419了解详情。
下面的公式正确吗
不,事情要复杂得多。我已经详细解释过这一点这个答案 https://stackoverflow.com/a/53624438/3448419.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)