gpt4 book ai didi

java - Java 8 中的 MetaSpace 有什么用?

转载 作者:IT老高 更新时间:2023-10-28 20:30:21 26 4
gpt4 key购买 nike

我知道他们在 Java 8 中已将 PermGen 替换为 MetaSpace。但我有几个问题:

  1. MetaSpace 是否默认被 GC 收集?
  2. 连PermGen都是GC收集的,加了-XX:+CMSClassUnloadingEnabled之类的args,那MetaSpace有什么比PermGen更好的地方呢?
  3. MetaSpace 是基于本地内存的,所以它会将 java 对象保存在磁盘上而不是 VM 上?
  4. 即使 MetaSpace 也会耗尽内存?如果再次这样,我会得到 OutOfMemoryException
  5. 默认情况下,MetaSpace 可以随着内存的增加而增长?

最佳答案

Is MetaSpace by default is GC collected?

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

Even the PermGen is GC collected by adding the args like -XX:+CMSClassUnloadingEnabled, then what makes MetaSpace better than PermGen?

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

MetaSpace is based on native memory, so it keeps the java objects on the disks rather than on VM?

根据元空间的描述,它只使用原生内存 (没有分页)。

根据 Pierre-Hugues Charbonneau (link here) 的研究,很明显,引入元空间并不一定能解决 OOM 问题,它充其量只是解决问题的方法,它试图动态调整元空间的大小内存来容纳越来越多的类,这些类被加载时可能会产生不可控制的增长(只要 native 内存允许)。

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

非常感谢 Pierre - Hugues Charbonneau。

关于java - Java 8 中的 MetaSpace 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24074164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com