在JDK 8中删除PermGen

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

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

忽略这个论点的原因是什么?


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

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

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


忽略这些争论的原因是永久代在JDK8的HotSpot中被删除,因为有以下缺点

  • 启动时固定大小 - 难以调整。
  • 内部热点类型是Java对象:可以使用完整的GC进行移动,不透明,没有强类型和难以调试,需要元元数据。
  • 简化完整集合:每个收集器的元数据的特殊迭代器
  • 想要同时释放类数据而不是在GC暂停期间
  • 实现PermGen限制的未来改进。
  • 永久一代(PermGen)空间已经完全被删除,并被一种称为Metaspace的新空间所取代。 PermGen删除的后果很明显, PermSize和MaxPermSize JVM参数被忽略 ,您将永远不会得到java.lang.OutOfMemoryError:PermGen错误。

    MetaSpace的优势

  • 利用Java语言规范属性:类和关联的元数据生命周期与类加载器匹配
  • 每个装载机存储区 - Metaspace
  • 仅线性分配
  • 没有个人回收(除了RedefineClass和类加载失败)
  • 无GC扫描或压缩
  • 不需要重新定位元空间对象
  • 元空间调整

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

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

  • 应用程序类数据共享
  • 年轻的集合优化,G1级卸载
  • 元数据大小减少和内部JVM足迹项目
  • GC性能也有所提高。 更多详情


    永久代(PermGen)空间已被完全删除,并被一个名为Metaspace的新空间所取代。PermGen删除的后果显然是PermSize和MaxPermSize JVM参数被忽略,您将永远不会得到java.lang.OutOfMemoryError :PermGen错误。 JDK 8 HotSpot JVM现在使用本地内存来表示类元数据,并称为Metaspace。 阅读更多>>

    链接地址: http://www.djcxy.com/p/82841.html

    上一篇: PermGen elimination in JDK 8

    下一篇: Why we have only two data structure "stack" and "heap"?