Java 并发标记扫描(CMS)卸载类中的对象类
通常对于CMS,我会看到以下标准 [卸载类sun.reflect.GeneratedMethodAccessorXXX][卸载 类sun.reflect.GeneratedConstructorAccessorXXXX][卸载类 sun.reflect.GeneratedSerializationConstructorAccessorXXX][1 类sun.reflect.GeneratedSerializationConstructorAccessorXXX] [卸货级别] sun.reflect.GeneratedSerializationConstructorAccessorXXX] 但我也注意到了以下几点 [卸载类客户_数据集XXXXX]–日志中出现280多次 [卸载类项目uxxxxxx]–日志中出现220+次 [卸货类收据\uuxxxxx]–日志中出现30多次 [卸载类Foo_uxxxxx]–日志中出现190次 *XXXXX只是随机数 我可以知道什么最有可能导致上述情况,这是否正常Java 并发标记扫描(CMS)卸载类中的对象类,java,reflection,garbage-collection,jvm,concurrent-mark-sweep,Java,Reflection,Garbage Collection,Jvm,Concurrent Mark Sweep,通常对于CMS,我会看到以下标准 [卸载类sun.reflect.GeneratedMethodAccessorXXX][卸载 类sun.reflect.GeneratedConstructorAccessorXXXX][卸载类 sun.reflect.GeneratedSerializationConstructorAccessorXXX][1 类sun.reflect.GeneratedSerializationConstructorAccessorXXX] [卸货级别] sun.refle
我不明白为什么类对象会有那么多的出现?类是模板,对象是类的实例。那么,为什么我会有这么多被卸载的Foo类呢?这是GC的一个标准行为,具体来说与CMS算法无关。GC正在卸载不再使用的类对象 虽然第一个日志片段显示与反射实现相关的类对象已卸载,但第二个日志片段引用的是正在运行的应用程序中的常规类。GC对这两种类型的类对象的处理是相同的 请检查您的JVM版本,然后查看是否要在CMS期间使用
-XX:+cmsclasssUnloadingEnabled
(或-XX:-cmsclasssUnloadingEnabled
)禁用/启用类卸载:
- 看到这个bug:
com.sun.Proxy.$ProxyXX
类的许多实例,用整数替换“XX”。可能还有自定义类工厂在运行时创建类,这可能是您的情况。