我已经安装了JDK 8,并试图运行Eclipse。我收到以下警告信息:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0
忽略这个VM选项的原因是什么?
Oracle的Java 8的JVM实现摆脱了PermGen模型,取而代之的是Metaspace。
因为永久代空间被移除了。内存管理做了一些改变。
java-8-permgen-metaspace
这是Java 8的新特性之一,是JDK增强建议122的一部分:
从Hotspot JVM中删除永久生成,因此需要调优永久生成的大小。
Java 8中包含的所有jep的列表可以在JDK8里程碑页面中找到。
忽略这些参数的原因是,由于以下缺点,在JDK8的HotSpot中已经删除了永久生成
MetaSpace的优点
Metaspace调优
最大元空间大小可以使用-XX:MaxMetaspaceSize标志来设置,默认值是无限的,这意味着只有系统内存是限制。-XX:MetaspaceSize调优标志定义元空间的初始大小。如果不指定此标志,元空间将在运行时根据应用程序需求动态地重新调整大小。
更改可以在将来实现其他优化和特性
GC性能也得到了改进。更多的细节
java.lang.OutOfMemoryError
在Java 8中,PermGen空间被MetaSpace取代。PermSize和MaxPermSize JVM参数将被忽略,如果在启动时出现,则会发出警告。
旧的PermGen和新的MetaSpace之间的主要区别是,您不必强制定义内存使用的上限。您可以保持MetaSpace空间限制无限制。因此,当内存使用增加时,你不会得到OutOfMemoryError错误。相反,保留的本机内存增加到完全填满增加的内存使用。
您可以为MetaSpace定义最大空间限制,然后它将抛出OutOfMemoryError:元数据空间。因此,谨慎地定义这个限制是很重要的,这样我们就可以避免内存浪费。