java - 次要垃圾回收后 JVM 元空间被填满

标签 java garbage-collection heap-memory visualvm metaspace

我一直在研究 Java 内存管理和堆内存中的各个部分,如 eden、s0、s1、old gen 和元空间。我使用 VisualGC 来跟踪堆的不同部分之间的内存填充情况。我注意到第一次垃圾回收后元空间区域占用的内存量急剧增加。

这是 VisualGC 表示的图像:

VisualGC_Monitoring

我想了解第一次GC后添加到元空间的内容。我做了研究但无法得到答案。这里有什么帮助吗?

最佳答案

元空间未“满”。根据标题,元空间的限制是 1.008G,但其中有 8.602M(初始分配为 9.125M)。这大约是限制的 1%。

元空间包含与类相关的东西;即字节码、编译的 native 代码、描述符、静态数据。对于引入一些 Java SE 或第 3 方库类的典型 Java 应用程序来说,大约 8M 字节的元空间量相当适中。

I would like to understand what gets added to metaspace after the first gc.

我怀疑这只是一个会计问题;即元空间使用的内存量仅在 GC 运行时更新。如果您注意到,元空间使用情况的 2 个明显变化(记录开始后)都与 GC 事件同时发生。

关于java - 次要垃圾回收后 JVM 元空间被填满,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450931/

相关文章:

java - 使用 Servlet 创建超链接

java.lang.OutOfMemoryError GC 开销限制超过 Java 堆空间?

c++ - C++中使用引用变量的内存分配

javascript - 如何在 Javascript 中释放前一个堆栈帧的内存

java - 堆空间内存不足

android - 如何检索设备上可用的最大堆?

java - 在 Chef 中记录 Java 异常

java - Heroku 本地应用程序测试控制台中缺少 System.out

java - 有人知道如何使用 MPAndroidChart 吗?

c - 如何解决奇怪的变化值?