Java 8中MetaSpace的用途是什么?

我知道他们已经用Java 8中的MetaSpace替换了PermGen。但是我有几个问题:

  1. 默认情况下是否收集MetaSpace?
  2. 甚至PermGen都是通过添加args这样的GC收集的-XX:+CMSClassUnloadingEnabled,那么什么使MetaSpace比PermGen更好呢?
  3. MetaSpace基于本机内存,因此它将Java对象保留在磁盘上而不是VM上吗?
  4. 甚至MetaSpace也会耗尽内存?如果是这样,我会得到的OutOfMemoryException
  5. 默认情况下,MetaSpace可以随着内存的增加而增长吗?

提前致谢

回答:

默认情况下是否收集MetaSpace?

是的,GC会在元空间变满时在元空间上运行,它还会动态增加(如果允许)分配给元数据的内存。

甚至通过添加-XX:+

CMSClassUnloadingEnabled之类的参数来收集PermGen的GC,那么什么使MetaSpace比PermGen更好呢?

改进之处在于元空间的动态扩展,而这是permgen无法做到的。

MetaSpace基于本机内存,因此它将Java对象保留在磁盘上而不是VM上吗?

根据对元空间的描述,它仅使用本机内存(不分页)。

根据Pierre-Hugues

Charbonneau(链接)的研究,很明显,元空间的引入并不一定解决OOM问题,它充其量只是解决该问题的绷带,它试图动态调整元空间的内存大小以适应越来越多的类被加载,可能会产生不可控制地增长的副作用(只要本地内存允许)。

通过将MaxMetaspaceSize参数设置为JVM并运行提供的示例程序,可以实现著名的OOM错误。

非常感谢Pierre-Hugues Charbonneau。

以上是 Java 8中MetaSpace的用途是什么? 的全部内容, 来源链接: utcz.com/qa/401779.html

回到顶部