我正在研究Java 6 18 VM环境下垃圾回收的各种选项,并希望得到一些指引。
我们的应用程序在JBoss上运行,有时会出现著名的PermGen错误,在互联网上关于解决或减轻这个问题的最佳方法存在许多相互冲突和过时的信息。
从我所见,如下是正确的:
- 仅依靠VM选项无法解决此问题,只能拖延解决时间。
- 修复编码错误是解决此问题的唯一可靠方法,可以在应用程序服务器本身中(不太可能)或正在应用程序服务器中运行的代码(我们的代码或第三方库)中进行修复。填充Permgen通常是应用程序类加载器加载的对象与应用程序服务器类加载器加载的对象之间相互引用导致的,从而防止应用程序类加载器的垃圾回收。
由此产生了两个问题:
- 以上是否正确?
- VM选项
CMSClassUnloadingEnabled
和CMSPermGenSweepingEnabled
在这方面有什么作用?从我所看到的,CMSClassUnloadingEnabled
覆盖或隐式启用CMSPermGenSweepingEnabled
。它们中的任何一个是否有助于解决上述问题?