我在自己的环境中不断检测PermGen中的OOM:
我知道String.intern()问题-但是我没有足够有值(value)的用法。
增加MaxPermGen的大小并没有费力(从128 Mb到256 Mb)。
还有什么其他原因可以为PermGen调用OOM?
在这种情况下(策略,工具等)哪种调查方案是最佳的?
谢谢你的帮助
最佳答案
新的类对象被放置到PermGen中,因此占据了越来越大的空间。不管您创建PermGen空间有多大,在进行足够的部署后,空间将不可避免地达到顶峰。您需要做的是采取措施冲洗PermGen,以便可以稳定其大小。有两个用于执行此清除操作的JVM标志:
-XX:+CMSPermGenSweepingEnabled
此设置将PermGen包括在垃圾收集运行中。默认情况下,PermGen空间从不包含在垃圾回收中(因此会无限制地增长)。
-XX:+CMSClassUnloadingEnabled
此设置告诉PermGen垃圾回收清除对类对象执行操作。默认情况下,即使在垃圾回收期间访问PermGen空间,类对象也将获得豁免。
关于java - PermGen内存不足的原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5635255/