java中的类卸载

时间:2010-04-01 09:22:05

标签: java garbage-collection classloader

当一个类加载器被垃圾收集时,它卸载的类是否被卸载? 当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时卸载一个类?

1 个答案:

答案 0 :(得分:5)

类加载器不会被垃圾收集,而为它创建的任何类都是“实时” - 部分是因为你可以向类请求它的类加载器。