PermGen空间异常

Nav*_*ath 4 java jboss

我在JBoss上运行的应用程序使用JAVA 5(32位).但它仅适用于32位工作正常.当我们在64位java5上部署它时,它会抛出异常

"java.lang.OutOfMemoryError: PermGen space" exception
Run Code Online (Sandbox Code Playgroud)

是否需要补丁?是否需要更改代码?

提前致谢.

gig*_*dot 7

当我在tomcat或jetty下运行我的Web应用程序时,我得到了同样的问题.永久生成内存用于加载类,其思路是"类是一次加载的".由于我使用了相当多的库和Spring框架,因此当我多次重新部署Web应用程序而不重新启动servlet容器时,这个内存很快就会填满.

我发现增加最大永久发电量是不够的.您还需要允许垃圾收集在运行时删除未使用的类,否则它将被填满并抛出PermGen空间异常.以下是我为servlet容器添加的JVM选项,

-XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
Run Code Online (Sandbox Code Playgroud)

-XX:MaxPermSize用于设置永久生成的最大值.这应该大于默认大小.

-XX:+CMSClassUnloadingEnabled此选项用于允许JVM在运行时卸载该类.默认情况下,禁用类卸载.对于Java 5,请阅读此内容.

-XX:+UseConcMarkSweepGC,为了使类上传选项起作用,还必须设置此选项(参考)

此外,您应该考虑升级JVM版本.Java 5太旧了.