2

通常对于 CMS,我会看到以下标准输出

[卸载类 sun.reflect.GeneratedMethodAccessorXXX] [卸载类 sun.reflect.GeneratedConstructorAccessorXXXX] [卸载类 sun.reflect.GeneratedSerializationConstructorAccessorXXX] [卸载类 sun.reflect.GeneratedSerializationConstructorAccessorXXX] [卸载类 sun.reflect.GeneratedSerializationConstructorAccessorXXX]

但我也注意到其中的以下内容

[卸载类 Customer_datasetXXXXX] – 日志中出现 280+

[卸载类 Item_XXXXXX] – 日志中出现 220+

[卸载类 Receipt_XXXXX] – 日志中出现 30+

[卸载类 Foo_XXXXX] – 日志中出现 190 次

*XXXXX 只是随机数。

我可以知道什么最有可能导致上述情况,这是否正常?

我不明白为什么类对象会出现那么多?类是模板,对象是类的实例。那么为什么我有这么多的 Foo 类被卸载呢?

4

1 回答 1

2

这是 GC 的标准行为,具体与 CMS 算法无关。GC 正在卸载不再使用的类对象。

虽然第一个日志片段显示与反射实现相关的类对象已卸载,但第二个日志片段引用了正在运行的应用程序中的常规类。GC 确实将这两种类型的类对象视为相同。

请检查您的 JVM 版本,然后查看是否要在 CMS 期间使用-XX:+CMSClassUnloadingEnabled(或)禁用/启用类卸载:-XX:-CMSClassUnloadingEnabled

有关 ClassUnloading 的更多信息:

于 2014-01-21T22:44:52.570 回答