【发布时间】:2011-03-21 00:20:24
【问题描述】:
我正在研究围绕 Java 6 18 VM 上的垃圾收集的各种选项,并希望得到一些指导。
我们在 JBoss 上运行我们的应用程序,在重新部署期间偶尔会出现臭名昭著的 PermGen 错误。互联网上有很多关于解决或缓解此问题的最佳方法的相互矛盾和过时的信息。
来自what I can see,以下是正确的:
- 单独的 VM 选项无法解决此问题,只能推迟。
- 解决此问题的唯一可靠方法是修复应用程序服务器本身(不太可能)或应用程序服务器中运行的代码(我们的代码或第三方库)中的编码错误(更有可能)。 Permgen 的填充通常是应用类加载器加载的对象对 Application Server 类加载器加载的对象的引用的结果,从而阻止了应用程序类加载器的垃圾回收。
我有两个问题由此产生:
- 以上是否正确?
- VM 选项
CMSClassUnloadingEnabled和CMSPermGenSweepingEnabled在哪里出现?从我可以看到CMSClassUnloadingEnabled取代或隐式启用CMSPermGenSweepingEnabled。他们中的任何一个都有助于解决上述问题吗?
【问题讨论】:
标签: java memory-leaks garbage-collection