【JVM虚拟机】类加载器的说明

类加载器分为4种类型

加载器 说明
Bootstrp loader Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类
ExtClassLoader Bootstrp loader加载ExtClassLoader,并且将ExtClassLoader的父加载器设置为Bootstrp loader.ExtClassLoader是用Java写的,具体来说就是 sun.misc.Launcher$ExtClassLoader,ExtClassLoader主要加载%JAVA_HOME%/jre/lib/ext,此路径下的所有classes目录以及java.ext.dirs系统变量指定的路径中类库。
AppClassLoader Bootstrp loader加载完ExtClassLoader后,就会加载AppClassLoader,并且将AppClassLoader的父加载器指定为 ExtClassLoader。AppClassLoader也是用Java写成的,它的实现类是 sun.misc.Launcher$AppClassLoader,另外我们知道ClassLoader中有个getSystemClassLoader方法,此方法返回的正是AppclassLoader.AppClassLoader主要负责加载classpath所指定的位置的类或者是jar文档,它也是Java程序默认的类加载器。
用户自定义加载器 加载自定义的类

双亲委派机制

【JVM虚拟机】类加载器的说明_第1张图片

比如当我们自定义的Class A 需要被加载的时候,
AppClassLoader会交给父级ExtClassLoader 去加载,而ExtClassLoader 会交给父级Bootstrp loader加载,当父级的Bootstrp loader加载不了的话,会交给子级ExtClassLoader加载,加载不了的话,交给子级AppClassLoader去加载,如果还是加载不了的话,就抛出异常

注意: 父级加载器看不到子类加载器,然后子类加载器可以看到父类的加载器

你可能感兴趣的:(JVM虚拟机)