Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java [ZGC]为什么使用的内存比转储文件大得多?_Java_Jvm_Heap Memory_Heap Dump_Zgc - Fatal编程技术网

Java [ZGC]为什么使用的内存比转储文件大得多?

Java [ZGC]为什么使用的内存比转储文件大得多?,java,jvm,heap-memory,heap-dump,zgc,Java,Jvm,Heap Memory,Heap Dump,Zgc,以下是一些信息: Linux版本3.18.6-2.el7.centos.x86_64、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情况下:垃圾收集(主动)1808M(11%)->166M(1%) 我已经搜索并阅读了以下答案,但仍然无法解决我的疑问

以下是一些信息:

  • Linux版本3.18.6-2.el7.centos.x86_64、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情况下:垃圾收集(主动)1808M(11%)->166M(1%)
  • 我已经搜索并阅读了以下答案,但仍然无法解决我的疑问


  • 我不确定第6点到底是什么,如果您显示垃圾收集器日志文件中的几行内容,会更有帮助。我也不使用VisualVM,所以不能对此发表评论

    所以这个答案主要是猜测


    JVM使用的内存被划分为不同的区域,最重要的是您有一个堆和一个堆栈。但是您仍然会看到堆比您用-Xmx配置的要大,因为有一个称为Metaspace(或旧JVM中的永久生成)的区域,它保存静态信息,如类或源代码中的字符串文本。元空间位于“普通”堆的顶部。我的猜测是,有些工具将其计入堆中,有些则不计入堆中。这可能就是你得到不同数字的原因。

    为什么不呢?你会期望什么呢?内存使用率每天都在增加,虽然增加的幅度在减少,但这种情况已经持续了大约一周。@APANGIN你的问题是什么?什么是“怀疑”?正如链接3所说,转储只包含活动对象(即垃圾收集之后)。感谢您的回答。第6点来自ZGC日志,它是gc触发器信息。