我之前有点问过这个问题 - JVM标志CMSClassUnloadingEnabled实际上做了什么?,但这一次略有不同!
如果我启动了-XX:+CMSPermGenSweepingEnabled设置了标志的Java VM,则会打印以下消息:
请在将来使用CMSClassUnloadingEnabled代替CMSPermGenSweepingEnabled
该-XX:+CMSPermGenSweepingEnabled标志通常用于缓解PermGen OutOfMemory错误,但是我在其他地方已经读过,人们已经发现通过遵循上述建议他们仍然有这些错误,但是通过坚持-XX:+CMSPermGenSweepingEnabled以及-XX:+CMSClassUnloadingEnabled他们的VM在重启之间保持更长时间.
是否-XX:+CMSClassUnloadingEnabled真的取代-XX:+CMSPermGenSweepingEnabled或者是否仍然有两个好处?
提前致谢
丰富ps:我知道perm gen问题的根本原因仍然是Classloader泄漏,这更多是关于JVM在我们使用上述选项时产生的消息.
我们有一个Web应用程序,它使用Spring-Hibernate将注册用户数据保存在Oracle数据库中.该应用程序在开发环境中运行良好,但是当我们在具有更多数据的实时环境中复制它时,它失败了.最初应用程序正常启动,但在几次操作之后发生'PermGen out of space'异常.
我已经开始在Google,Spring和Hibernate论坛上搜索,但它没有帮助.关于这个错误有很多讨论,但是对于每个解决方案,都有人说:"它有效"而其他人说'它没有'.
例如,许多人提出增加-XX:MaxPermSizeJVM参数,其他人说它不起作用.有帖子说需要使用javassist库和其他库以及cglib库的问题.其他人说问题出在cglib上.
我们使用Java1.5_0_09,Spring 2.5和javaassist3.4.GA,Tomcat 5.5作为web容器,Oracle 10g作为数据库.
任何人都能解释一下导致这个问题的原因以及如何解决这个问题?