在JDK 8中消除PermGen

Sha*_*med 220 java jvm permgen java-8

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

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

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

par*_*085 343

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

  • 在启动时固定尺寸 - 难以调整.
  • 内部热点类型是Java对象:可以使用完整的GC移动,不透明,不强类型和难以调试,需要元元数据.
  • 简化完整集合:每个收集器的元数据的特殊迭代器
  • 想要同时释放类数据,而不是在GC暂停期间解除分配
  • 启用受PermGen限制的未来改进.

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

MetaSpace的优点

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

元空间调整

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

Change将在未来启用其他优化和功能

  • 应用程序类数据共享
  • 年轻的集合优化,G1类卸载
  • 元数据大小减少和内部JVM足迹项目

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

  • 我应该提一下,实习字符串以前存储在PermGen空间中,但是被移动到Java 7中的主Java堆中. (26认同)
  • 对一般受众(我主要是非Java人员,例如不得不处理JVM的伙伴)的一些温和介绍在这个答案中不会有害. (2认同)

ass*_*ias 113

这是Java 8的新功能之一,是JDK Enhancement Proposals 122的一部分:

从Hotspot JVM中删除永久生成,因此需要调整永久生成的大小.

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


Dhr*_*hah 18

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

  • 'HotSpot JVM现在使用本机内存来表示类元数据. - 以前HotSpot JVM使用了什么内存?什么是'本土记忆'exaclty? (3认同)

Seb*_*edl 15

因为PermGen空间被删除了.内存管理有所改变.

http://java.dzone.com/articles/java-8-permgen-metaspace


Shu*_*dey 11

PermGen空间由Java 8中的MetaSpace替换.将忽略PermSize和MaxPermSize JVM参数,并在启动时出现警告.

现在,大多数类元数据的分配都是从本机内存中分配的.*已删除用于描述类元数据的类.

旧的PermGen和新的MetaSpace之间的主要区别在于,您不必强制定义内存使用的上限.您可以保持MetaSpace空间限制无限制.因此,当内存使用量增加时,您将无法获得OutOfMemoryError错误.而是增加保留的本机内存以完全填充增加的内存使用量.

您可以为MetaSpace定义空间的最大限制,然后它将抛出OutOfMemoryError:元数据空间.因此,谨慎地定义此限制非常重要,这样我们就可以避免内存浪费.


chr*_*ke- 8

Oracle的Java 8 JVM实现摆脱了PermGen模型,并将其替换为Metaspace.