我们一直在推动我们应用程序中的permgen内存空间越来越高,我试图找出我们是否有某种类型的泄漏进入permgen区域。我们不做热取消部署/重新部署操作,但我们有很多代理,包括动态和CGLIB生成。我们还做了一些复杂的类加载器位来支持各种用例,我怀疑这些也可能是导致permgen浪费的原因。
所以我在运行的应用程序上运行jmap -permstat,希望能够深入了解可能填补我们permgen空间的内容。 (我还运行一个包含实时和死对象的正常堆转储,这样我就可以追溯可能来自permstat输出的线索。)
但是,在jmap permstat列出的2400个类加载器中,除引导类加载器之外的所有类都被列为“死”。这没有任何意义,因为应用程序绝对是直播和工作。
我的理解是,如果有资格进行垃圾收集,jmap会将类加载器报告为“死”但我在这里肯定是错的...
我错过了什么? “死”在这里意味着什么?除了我在这里可能存在的误解之外,谷歌搜索并没有提供很多答案。
答案 0 :(得分:1)
以下是一些想法:
-XX:+UseConcMarkSweepGC
,请确保您还使用-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled