Класс выгрузки в Java - PullRequest
       25

Класс выгрузки в Java

2 голосов
/ 01 апреля 2010

Когда загрузчик классов собирает мусор, загруженные им классы выгружаются? Когда 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 Ответ

5 голосов
/ 01 апреля 2010

Загрузчик классов не будет собирать мусор, в то время как любые классы, созданные для него, являются «живыми» - частично , потому что вы можете запросить у класса его загрузчик классов.

...