-XX:MaxPermSize是做什么的?

2022-08-31 05:13:20

具体来说,为什么它有助于解决PermGen OutOfMemoror问题?

另外,一个答案的奖励点,指向我关于JVM参数的文档...


答案 1

永久空间是存储 VM 使用的类、方法、内部化字符串和类似对象且从不解除分配(因此得名)的地方。

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

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

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

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


答案 2

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

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


推荐