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