我在JBoss上运行的应用程序使用JAVA 5(32位).但它仅适用于32位工作正常.当我们在64位java5上部署它时,它会抛出异常
"java.lang.OutOfMemoryError: PermGen space" exception
Run Code Online (Sandbox Code Playgroud)
是否需要补丁?是否需要更改代码?
提前致谢.
当我在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太旧了.
| 归档时间: |
|
| 查看次数: |
10004 次 |
| 最近记录: |