3

据我了解,JVM 内的Native Area完全禁止垃圾收集器使用。元空间所在的Native Area内部。在前面提到的元空间中,我们有常量池、字段和方法数据等区域。

由于本机区域是由 C++ 内存管理管理的(或者至少我是这么理解的),为什么不是固定大小的 Metaspace,而是根据需要多少内存而动态增长,不会运行出记忆?元空间是否允许垃圾收集器,但本机区域的其余部分不允许?C++ 是否动态管理那里的内存?

4

1 回答 1

4

那个元空间怎么来的,不是固定大小的

MaxMetaSpaceSize您可以通过在命令行上设置值来限制大小。

...不会耗尽内存吗?

是的,它确实内存不足。当它超过可用内存的使用量并会出现java.lang.OutOfMemoryError: Metaspace异常。

元空间中是否允许垃圾收集器

是的。GC 将收集 Java 堆和元空间,但不收集本机堆。它由拥有它的本机代码的任何人管理。

参考 :

3.2 理解 OutOfMemoryError 异常

关于 G1 垃圾收集器、永久代和元空间

于 2019-01-20T14:13:40.203 回答