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