我已经安装了JDK 8并尝试运行Eclipse。我收到以下警告信息:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
忽略此VM选项的原因是什么?
忽略这些论点的原因是,由于以下缺点,HotSpot for JDK8中已删除了永久生成
永久生成(PermGen)空间已被完全删除,并被一个名为Metaspace的新空间所取代。删除PermGen的后果显然是忽略了PermSize和MaxPermSize JVM参数,并且永远不会得到java.lang.OutOfMemoryError:PermGen错误。
MetaSpace的优点
元空间调整
可以使用-XX:MaxMetaspaceSize标志设置最大元空间大小,默认值为unlimited,这意味着只有系统内存是限制。 -XX:MetaspaceSize调整标志定义元空间的初始大小如果未指定此标志,则Metaspace将根据运行时的应用程序需求动态调整大小。
Change将在未来启用其他优化和功能
GC性能也有提高。 qazxsw poi
这是Java 8的新功能之一,是More detail的一部分:
从Hotspot JVM中删除永久生成,因此需要调整永久生成的大小。
可以在JDK Enhancement Proposals 122上找到将包含在Java 8中的所有JEP的列表。
永久生成(PermGen)空间已被完全删除,并被一个名为Metaspace的新空间所取代。删除PermGen的后果显然是忽略了PermSize和MaxPermSize JVM参数,你将永远不会得到JDK8 milestones page:PermGen错误。 JDK 8 HotSpot JVM现在使用本机内存来表示类元数据,称为Metaspace。 java.lang.OutOfMemoryError
因为PermGen空间被删除了。内存管理有所改变。
PermGen空间由Java 8中的MetaSpace替换。将忽略PermSize和MaxPermSize JVM参数,并在启动时出现警告。
现在,大多数类元数据的分配都是从本机内存中分配的。 *已删除用于描述类元数据的类。
旧的PermGen和新的MetaSpace之间的主要区别在于,您不必强制定义内存使用的上限。您可以保持MetaSpace空间限制无限制。因此,当内存使用量增加时,您将无法获得OutOfMemoryError错误。而是增加保留的本机内存以完全填充增加的内存使用量。
您可以为MetaSpace定义空间的最大限制,然后它将抛出OutOfMemoryError:元数据空间。因此,谨慎地定义此限制非常重要,这样我们就可以避免内存浪费。
Oracle的Java 8 JVM实现摆脱了PermGen模型并将其替换为http://java.dzone.com/articles/java-8-permgen-metaspace。