“卸载类”消息的含义

时间:2010-05-14 12:15:07

标签: java

任何人都可以解释为什么下面的行在运行时出现在输出控制台中?

(一个可能的答案是完全permGen,但这可以排除,因为该程序仅使用PermGen中可用的max100MB中的24MB)

[卸载类sun.reflect.GeneratedSerializationConstructorAccessor28]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor14]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor4]
   [卸载类sun.reflect.GeneratedMethodAccessor5]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor38]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor36]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor22]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor8]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor39]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor16]
   [卸载类sun.reflect.GeneratedSerializationConstructorAccessor2]
   [卸载类sun.reflect.GeneratedConstructorAccessor1]

该程序使用以下参数运行:

-Xmx160M
-XX:MaxPermSize参数= 96M
-XX:PermSize = 96M
-XX:+ UseConcMarkSweepGC
-XX:+ UseParNewGC
-XX:+ PrintGCTaskTimeStamps
-XX:+ PrintHeapAtGC
-XX:+ PrintTenuringDistribution
-XX:+ PrintGCDetails
-XX:+ PrintGCDateStamps
-XX:+ PrintGCTimeStamps
-verbose:GC
-Xloggc:/logs/gc.log

堆中和permGen中有足够的空间。

1 个答案:

答案 0 :(得分:18)

这些类保持为softreferences,它们始终符合GC的条件。当达到最大内存时,GC本身不会 运行,如果你理解我的意思,它也会在有空间的情况下运行。

顺序API的“引擎盖”使用了这些类,它使用反射来访问字段并调用方法。


更新:关于将类卸载记录到stdout而不是-Xloggc中指定的路径,已经出现了针对此问题的错误报告:Bug ID 6637203。 4个月后修复了这个问题。将JVM升级到最新版本。