以下是一些信息:
linux版本3.18.6-2.el7.centos.x8664、openjdk-11.0.2
使用zgc和-xms16384m-xmx16384m
最高指令显示:17.013t virt,0.016t res,0.015t shr,35.2%cpu,13.0%mem
堆转储大小为83m(使用jcmd命令)
visualvm摘要显示堆大小为55m
在大多数gc中ituations:garbage collection (主动)18.08亿(11%)->1.66亿(1%)
我已经搜索并阅读了以下答案,但仍然无法解决我的疑问。
javazgc垃圾收集器使用大量内存
zgc maxheap大小超过物理内存
为什么我的java堆转储大小比使用的内存小得多?
1条答案
按热度按时间e37o9pze1#
我不确定第6点到底是什么,如果您显示了垃圾收集器日志文件中的几行代码,会更有帮助。我也不使用visualvm,所以不能对此发表评论。
所以这个答案主要是猜测。
jvm使用的内存被划分为不同的区域,最重要的是您有一个堆和一个堆栈。但是您仍然会看到堆将比您用-xmx配置的要大,因为有一个称为metaspace(或旧JVM中的永久生成)的区域,它保存静态信息,如类或源代码中的字符串文本。元空间位于“正常”堆的顶部。我的猜测是,有些工具会将其计入堆中,有些则不然。这可能就是你得到不同数字的原因。