JDK 8 中的 PermGen 消除

2022-08-31 05:41:56

我已经安装了JDK 8并尝试运行Eclipse。我收到以下警告消息:

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0 

忽略此 VM 选项的原因是什么?


答案 1

忽略这些论点的原因是,由于以下缺点,在JDK8的HotSpot中删除了永久生成

  • 启动时大小固定 – 难以调整。
  • 内部热点类型是Java对象:可以使用完整的GC移动,不透明,不强类型且难以调试,需要元元数据。
  • 简化完整集合:每个收集器的元数据的特殊迭代器
  • 希望同时释放类数据,而不是在 GC 暂停期间
  • 实现受 PermGen 限制的未来改进。

永久一代(PermGen)空间已被完全删除,取而代之的是一个名为Metaspace的新空间。删除PermGen的后果是,显然PermSize和MaxPermSize JVM参数被忽略,你永远不会得到java.lang.OutOfMemoryError:PermGen错误。

元空间的优势

  • 利用 Java 语言规范属性:类和关联的元数据生存期与类装入器的匹配
  • 每个加载程序存储区域 – 元空间
  • 仅线性分配
  • 无单个回收(重定义类和类加载失败除外)
  • 无需 GC 扫描或压实
  • 元空间对象无需重新定位

元空间调优

可以使用 -XX:MaxMetaspaceSize 标志设置最大元空间大小,默认值为无限制,这意味着只有系统内存是限制。-XX:MetaspaceSize 调优标志定义了元空间的初始大小 如果不指定此标志,则 Metaspace 将根据运行时的应用程序需求动态调整大小。

更改可在将来启用其他优化和功能

  • 应用程序类数据共享
  • 年轻集合优化,G1 类卸载
  • 元数据大小缩减和内部 JVM 占用空间项目

还有改进的GC性能。更多详情


答案 2

这是 Java 8 的新功能之一,也是 JDK 增强建议 122 的一部分:

从热点 JVM 中删除永久生成,因此需要调整永久生成的大小。

Java 8 中包含的所有 JEP 的列表可以在 JDK8 里程碑页面上找到。


推荐