具体来说,修复PermGen OutOfMemoryError问题有什么帮助?
此外,如果能指向JVM参数文档的答案会加分...
具体来说,修复PermGen OutOfMemoryError问题有什么帮助?
此外,如果能指向JVM参数文档的答案会加分...
永久代是虚拟机(VM)存储类、方法、内部化字符串和类似对象的空间,这些对象不会被回收(因此得名“permanent space”)。
这篇Oracle文章简洁地介绍了HotSpot GC的工作方式和参数设置,并建议在加载许多类的情况下增加永久代的大小(这通常是应用程序服务器和一些IDE如Eclipse的情况):
对于大多数应用程序,永久代对垃圾收集器的性能没有明显影响。但是,有些应用程序动态生成和加载许多类;例如,某些JavaServer Pages (JSP)页面的实现。这些应用程序可能需要一个更大的永久代来容纳额外的类。如果需要,可以使用命令行选项-XX:MaxPermSize =增加最大永久代的大小。
请注意,另一份Oracle文档列出了其他HotSpot参数。
更新 :从Java 8开始,永久代和该设置都已经消失。用于加载类和方法的内存模型不同,并且没有限制(使用默认设置)。您应该不会再看到这个错误了。
-XX:PermSize -XX:MaxPermSize
用于设置永久代的大小。
永久代:永久代是存放类文件的地方。这些文件是编译后的类和JSP页面的结果。如果该空间已满,会触发Full Garbage Collection操作。如果Full Garbage Collection无法清理旧的未引用类并且没有足够的空间来扩展永久代空间,则会抛出内存不足错误(OOME)并导致JVM崩溃。
在Java 8中,该参数通常用于打印类似以下的警告信息:
Java HotSpot(TM) 64-Bit Server VM 警告: 忽略选项 MaxPermSize=512m;在 8.0 版本中已删除支持。
你在Java 8中看到此消息的原因是因为Permgen已被Metaspace取代,以解决PermGen的一些缺点(正如你自己所看到的,其中之一是它具有固定的大小)。
提示:关于Metaspace的文章:http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html