XX:MaxPermSize呢?

具体来说,为什么它有助于修复PermGen OutOfMemoryError问题?

此外,回答的奖励点将指向JVM参数文档。


永久空间是VM使用的类,方法,内部化字符串和类似对象的存储位置,永远不会释放(因此名称)。

这篇Oracle文章简洁地介绍了HotSpot GC的工作和参数化,并建议您在加载多个类时对这个空间进行扩展(这通常适用于应用程序服务器和Eclipse等某些IDE):

对于大多数应用程序来说,永久生成对垃圾收集器性能没有显着影响。 但是,一些应用程序动态生成并加载许多类; 例如,JavaServer Pages(JSP)页面的一些实现。 这些应用程序可能需要更大的永久代,才能保存其他类。 如果是这样,可以通过命令行选项-XX:MaxPermSize =来增加最大永久生成大小。

请注意,其他Oracle文档列出了其他HotSpot参数。

更新:从Java 8开始,permgen空间和此设置都消失了。 用于加载的类和方法的内存模型是不同的,并且不受限制(使用默认设置)。 你不应该再看到这个错误。


-XX:PermSize -XX:MaxPermSize用于设置永久生成的大小。

永久生成:永久生成是保存类文件的地方。 这些是编译过的类和jsp页面的结果。 如果此空间已满,则会触发完整垃圾收集。 如果Full Garbage Collection无法清除旧的未引用类,并且没有剩余空间来扩展永久空间,则会抛出内存不足错误(OOME),JVM将崩溃。


在Java 8中,该参数通常用于打印如下所示的警告消息:

Java HotSpot(TM)64位服务器VM警告:忽略选项MaxPermSize = 512m; 在8.0中删除了支持

你在Java 8中得到这个消息的原因是因为Permgen已经被Metaspace所取代,以解决PermGen的一些缺点(正如你自己看到的,其中一个缺点是它有一个固定的大小)。

仅供参考:有关Metaspace的文章:http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html

链接地址: http://www.djcxy.com/p/82385.html

上一篇: XX:MaxPermSize do?

下一篇: The various options for solving PermGen problems