当前位置: 首页 > 面试题库 >

Java 8中MetaSpace的用途是什么?

林祯
2023-03-14
问题内容

我知道他们已经用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。



 类似资料:
  • 问题内容: 我对Bash脚本非常陌生,有人可以向我解释$#和$的情况吗?在以下代码中工作? 问题答案: 在Y分钟内来自Learn Bash :

  • 问题内容: 在Android 中实现类的用途是什么? 问题答案: 这是一个简单的界面,其中添加了两个字段: Android内部使用的sqlite数据库带有一列,该 列会自动递增,并且可以用作主键。这也与

  • 本文向大家介绍JavaScript中Atomics的用途是什么?,包括了JavaScript中Atomics的用途是什么?的使用技巧和注意事项,需要的朋友参考一下 原子学 的原子公司 是在JavaScript的对象,其提供要被作为静态方法进行原子操作。就像Math 对象的方法一样,Atomics 的方法和属性也是静态的。原子 与SharedArrayBuffer 对象一起使用。 该Atromic 

  • 本文向大家介绍javascript中window.location的用途是什么?,包括了javascript中window.location的用途是什么?的使用技巧和注意事项,需要的朋友参考一下 Window.location只读属性返回一个Location对象,其中包含有关文档当前位置的信息。 Location接口表示链接到的对象的位置(URL)。属性在位置对象上可用- Location.hre

  • 我试图更深入地了解Docker的卷,我很难弄清楚以下方面的差异/用例: docker volume create(docker卷创建)命令 docker run-v/path:/host\u路径 Dockerfile文件中的卷条目 我特别不理解如果将卷条目与v标志结合在一起会发生什么。

  • 问题内容: 我不了解Java的这一功能。我知道它使编码更容易,有时看起来更整洁,但这的实际用途是什么?相反,我觉得最好显示警告,因为将来任何人在修改代码之前都可以引用它们。这@SuppressWarnings是否提高了编译效率,还是根据任何编码标准? 问题答案: 其他答案已经解释了很多用例,但是我想强调一点, 有时您绝对需要使用它来克服语言本身的局限性,在这些情况下,使用绝对是合法的。 在其他情况