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

这是VisualGC表示形式的图像:



我想了解在第一个gc之后添加到元空间的内容。我做了研究,但没有得到答案。这里有什么帮助吗?

最佳答案

元空间不完整。根据标题,元空间的限制为1.008G,但其中有8.602M(初始分配为9.125M)。大约是限额的1%。

元空间包含与类相关的事物;即字节码,已编译的本机代码,描述符,静态变量。对于典型的Java应用程序来说,大约8M字节是一个适度的元空间,该应用程序会引入一些Java SE或第三方库类。


  我想了解在第一个gc之后添加到元空间的内容。


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

10-02 22:33