Java -XX:MaxPermSize做什么?

Java -XX:MaxPermSize做什么?,java,jvm,jvm-arguments,Java,Jvm,Jvm Arguments,具体来说,为什么它有助于修复PermGen OutOfMemoryError问题 另外,还有一个额外的答案,它让我找到了关于JVM参数的文档…永久空间是存储VM使用的类、方法、内部化字符串和类似对象的地方,并且永远不会解除分配(因此而得名) 简明扼要地介绍了HotSpot GC的工作和参数化,并建议您在加载多个类时扩展此空间(对于应用程序服务器和某些IDE(如Eclipse),通常是这样): 永久性的一代对垃圾没有明显的影响 大多数应用程序的收集器性能。然而,一些 应用程序动态生成和加载许多类;

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


另外,还有一个额外的答案,它让我找到了关于JVM参数的文档…

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

简明扼要地介绍了HotSpot GC的工作和参数化,并建议您在加载多个类时扩展此空间(对于应用程序服务器和某些IDE(如Eclipse),通常是这样):

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

请注意,其中列出了其他热点参数


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

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


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

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

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

在Java8中获得此消息的原因是,Permgen已被Metaspace取代,以解决Permgen的一些缺点(正如您自己所看到的,其中一个缺点是它具有固定的大小)


仅供参考:一篇关于Metaspace的文章:

你现在将如何给我这些额外积分?:)@PaulTomblin我不确定你链接到他的文章(谷歌的第一个结果)的人是否知道他在说什么。@dystroy我可以给你送个饼干吗?或者你可以对一个回答得很好的问题感到满意;)这并没有具体回答这个问题,但如果您正在研究JVM内存管理,我读过的关于它的最好文章是:(stackoverflow)。这不是在JDK>8上删除的,还是在所有VM上都使用JDK 11?