"卸载类"消息的含义

Ele*_*eco 23 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中有足够的空间.

Bal*_*usC 18

这些类作为软引用保存,始终符合GC的条件.GC本身并不仅在达到最大内存时运行,如果你理解我的意思,它也会在有空间时运行.

顺便说一下,这些类是在Serialization API的"引擎盖"下使用的,它使用反射来访问字段并调用方法.


更新:关于将类卸载记录到stdout而不是指定的路径-Xloggc,已经有一个错误报告来解决这个问题:错误ID 6637203.4个月后修复了这个问题.将JVM升级到最新版本.