据我了解,JVM内部的 Native Area 完全是垃圾收集器的禁区。 元空间所在的本机区域内。在上述元空间中,我们有诸如常量池,字段和方法数据之类的区域。
由于本机区域是由C ++内存管理管理的(或者至少是我所理解的),因此不是固定大小的元空间如何动态增长,取决于需要多少内存,会不会耗尽内存?元空间中是否允许使用垃圾收集器,但本机区域的其余部分是否不允许? C ++是否在那里动态管理内存?
答案 0 :(得分:4)
不是固定大小的元空间怎么来
您可以通过在命令行上设置MaxMetaSpaceSize
的值来限制大小。
...会不会用完内存?
是的,它实际上确实耗尽了内存。如果超出可用内存使用量,则会出现java.lang.OutOfMemoryError: Metaspace
异常。
元空间中是否允许垃圾收集器
是的。 GC将同时收集Java堆和元空间,而不收集本机堆。它由拥有它的本机代码来管理。
参考:
3.2 Understand the OutOfMemoryError Exception
About G1 Garbage Collector, Permanent Generation and Metaspace