如何用Java管理元空间和本机区域内存?

时间:2019-01-20 13:43:57

标签: java memory jvm metaspace

据我了解,JVM内部的 Native Area 完全是垃圾收集器的禁区。 元空间所在的本机区域内。在上述元空间中,我们有诸如常量池,字段和方法数据之类的区域。

由于本机区域是由C ++内存管理管理的(或者至少是我所理解的),因此不是固定大小的元空间如何动态增长,取决于需要多少内存,会不会耗尽内存?元空间中是否允许使用垃圾收集器,但本机区域的其余部分是否不允许? C ++是否在那里动态管理内存?

1 个答案:

答案 0 :(得分:4)

  

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

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

  

...会不会用完内存?

是的,它实际上确实耗尽了内存。如果超出可用内存使用量,则会出现java.lang.OutOfMemoryError: Metaspace异常。

  

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

是的。 GC将同时收集Java堆和元空间,而不收集本机堆。它由拥有它的本机代码来管理。

参考:

3.2 Understand the OutOfMemoryError Exception

About G1 Garbage Collector, Permanent Generation and Metaspace