当一个类加载器被垃圾收集时,它卸载的类是否被卸载? 当JVM运行时是详细模式,所有加载的类都是o / p。类似地,JVM会在卸载类时记录吗?
我编写了一个自定义类加载器来测试它,但是没有看到任何详细的日志来卸载类。
CustomClassLoader loader = new CustomClassLoader(new URL[]{}, CustomClassLoader.class.getClassLoader());
loader.addURL("D:\\workspace\\ClassLoaderTest\\implementation.jar");
Class c = null;
try {
c = Class.forName("Horse",false,loader);
if (c != null) {
try {
Animal animal = (Animal)c.newInstance();
animal.eat();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
catch(Exception e) {
e.printStackTrace();
}
c = null;
loader = null;
byte[] b = new byte[58*1024*1024];
System.gc();
ClassLoadingMXBean clBean = ManagementFactory.getClassLoadingMXBean();
System.out.println("Number of classes currently loaded " + clBean.getLoadedClassCount());
System.out.println("Number of classes loaded totally " + clBean.getTotalLoadedClassCount());
System.out.println("Number of classes unloaded " + clBean.getUnloadedClassCount());
即使ClassLoadingMXBean也将卸载的类数量设为0。
如何在类加载器GCed时卸载一个类?
答案 0 :(得分:5)
类加载器不会被垃圾收集,而为它创建的任何类都是“实时” - 部分是因为你可以向类请求它的类加载器。