-XX:MaxPermSize有什么作用?


259

具体来说,为什么对解决PermGen OutOfMemoryError问题有帮助?

另外,为我提供有关JVM参数文档的答案,还有加分。



6
oracle.com/technetwork/java/javase/tech / ...您现在如何给我这些奖励积分?:)
DenysSéguret2012年

1
@PaulTomblin我不确定要链接到他的文章的人(Google的第一个结果)是否知道他在说什么。
DenysSéguret2012年

@dystroy我可以给您发送一个cookie吗?或者您可以对一个得到很好回答的问题感到满意;)
Geoff 2012年

5
这并不能专门回答问题,但是如果您正在研究JVM内存管理,那么我阅读过的最好的文章就是这个和这个infoq链接
安倍晋三

Answers:


273

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

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

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

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

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


93

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

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


48

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

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

之所以在Java 8中收到此消息,是因为Permgen已被Metaspace取代,以解决PermGen的一些缺点(如您所见,这些缺点之一是它的大小固定)。

仅供参考:关于元空间的文章:http ://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html


6
另请参阅:JDK 8中的PermGen消除(stackoverflow)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.