我从 "jmap -permstat" 命令中看到以下信息:
为什么启用CMSClassUnloadingEnabled标志后,这些已死的类加载器没有被清理掉?我该如何解决这个问题?
0x000000077736cce0 12 173472 0x00000007723425d0 dead com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl$TransletClassLoader@0x00000007c83bea70
0x0000000777168a20 12 172264 0x00000007723425d0 dead com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl$TransletClassLoader@0x00000007c83bea70
0x0000000780b3c810 12 172264 0x00000007723425d0 dead com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl$TransletClassLoader@0x00000007c83bea70
0x0000000776ca6170 12 172264 0x00000007723425d0 dead com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl$TransletClassLoader@0x00000007c83bea70
0x00000007772b28a8 12 172264 0x00000007723425d0 dead com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl$TransletClassLoader@0x00000007c83bea70
....
现在永久代中有超过6000个已经死亡的TransletClassLoader类加载器,并且这个数字会不断增长,直到我遇到以下错误:
java.lang.OutOfMemoryError: PermGen space
我设置了以下JVM标志:
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)
为什么启用CMSClassUnloadingEnabled标志后,这些已死的类加载器没有被清理掉?我该如何解决这个问题?