Stock JDK classes and the “null” ClassLoader?

后端 未结 3 1661
南笙
南笙 2020-12-20 16:39

Hi guys : Im trying to debug a very strange class error by looking at the ClassLoaders for some dynamically created components. ClassLoaders are s

3条回答
  •  醉梦人生
    2020-12-20 17:17

    This is how it works . Whenever JVM try to load any class it's checks below conditions.

    If Class is loaded from Bootstrap ClassPath i.e; jdk\jre\lib\rt.jar , BootStrap ClassLoader will be called.

    If Class is loaded from Extension Classpath i.e; jdk\jre\lib\ext*.jar , Extension ClassLoader will be called.

    If Class is loaded from Application ClassPath i.e; as specified in Environment Variable , Application ClassLoader is called .

    Since Bootstrap ClassLoader is not implemented in java , it's either implemented in c or c++ so there is no reference for it that's why it returns null . But Extension and Application class Loader is written in java so you will get the reference as sun.misc.Launcher$ExtClassLoader@someHexValue and sun.misc.Launcher$AppClassLoader@someHexValue .

    So, if you do something like this System.out.println(String.class.getClassLoader()) you will get null since this class is been called by BootStrap ClassLoader, On the other hand if you do the same thing for a class in Ext or App Class path you will get $ExtClassLoader@someHexValue and sun.misc.Launcher$AppClassLoader@someHexValue respectively .

提交回复
热议问题