-XX:MaxPermSize做什么?

时间:2012-08-24 17:37:58

标签: java jvm jvm-arguments

具体来说,为什么修复PermGen OutOfMemoryError问题会有所帮助?

此外,答案的奖励积分指向了JVM参数的文档......

3 个答案:

答案 0 :(得分:247)

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

This Oracle article简洁地介绍了HotSpot GC的工作和参数化,并建议您在加载许多类时增加此空间(这通常适用于应用程序服务器和某些IDE,如Eclipse):

  

永久世代对垃圾没有明显的影响   大多数应用的收集器性能。但是,有些   应用程序动态生成并加载许多类;例如,   JavaServer Pages(JSP)页面的一些实现。这些   应用程序可能需要更大的永久代   额外的课程。如果是这样,最大永久生成大小可以   使用命令行选项-XX:MaxPermSize =。

增加

请注意,this other Oracle documentation列出了其他HotSpot参数。

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

答案 1 :(得分:82)

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

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

答案 2 :(得分:42)

在Java 8中,该参数通常用于打印类似这样的警告消息:

  

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

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

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