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