-XX:MaxPermSize做什么?

Geo*_*off 246 java jvm jvm-arguments

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

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

Den*_*ret 260

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

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

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

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

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


sto*_*333 90

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

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

  • +1表示发生的具体错误和时间表. (11认同)
  • 这不是在 JDK > 8 上被删除,还是在所有虚拟机上使用 JDK 11? (2认同)

And*_*ois 45

在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

  • 另请参见:[JDK 8中的PermGen消除](http://stackoverflow.com/questions/18339707/permgen-elimination-in-jdk-8)(stackoverflow). (6认同)