三个加载器类
Bootstrap ClassLoader 加载核心类库
最顶层的加载类,主要加载核心类库,JRE_HOME\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通过启动jvm时指定-Xbootclasspath和路径来改变Bootstrap ClassLoader的加载目录。Bootstrap ClassLoader是由C/C++编写的,它本身是虚拟机的一部分,所以它并不是一个JAVA类,也就是无法在java代码中获取它的引用,JVM启动时通过Bootstrap类加载器加载rt.jar等核心jar包中的class文件,int.class,String.class都是由它加载。JVM初始化sun.misc.Launcher并创建Extension ClassLoader和AppClassLoader实例。并将ExtClassLoader设置为AppClassLoader的父加载器。Bootstrap没有父加载器,但是它却可以作用一个ClassLoader的父加载器。比如ExtClassLoader。这也可以解释通过ExtClassLoader的getParent方法获取为Null的现象。
//Bootstrap CLassloderSystem.out.println(System.getProperty("sun.boot.class.path"));E:\JAVA\jdk1.8.0_171\jre\lib\resources.jar;E:\JAVA\jdk1.8.0_171\jre\lib\rt.jar;E:\JAVA\jdk1.8.0_171\jre\lib\sunrsasign.jar;E:\JAVA\jdk1.8.0_171\jre\lib\jsse.jar;E:\JAVA\jdk1.8.0_171\jre\lib\jce.jar;E:\JAVA\jdk1.8.0_171\jre\lib\charsets.jar;E:\JAVA\jdk1.8.0_171\jre\lib\jfr.jar;E:\JAVA\jdk1.8.0_171\jre\classes
Extention ClassLoader 扩展的类加载器
加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。还可以加载-D java.ext.dirs选项指定的目录。
//Extention ClassLoader Launcher.ExtClassLoaderSystem.out.println(System.getProperty("java.ext.dirs"));E:\JAVA\jdk1.8.0_171\jre\lib\ext;C:\windows\Sun\Java\lib\ext
Appclass Loader
也称为SystemAppClass 加载当前应用的classpath的所有类。
//Launcher.AppClassLoaderString str=System.getProperty("java.class.path");String [] strs=str.split(";");for (int i=0;i<strs.length;i++){System.out.println(strs[i]);}E:\JAVA\jdk1.8.0_171\jre\lib\charsets.jarE:\JAVA\jdk1.8.0_171\jre\lib\deploy.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\access-bridge.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\cldrdata.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\dnsns.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\jaccess.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\jfxrt.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\localedata.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\nashorn.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\sunec.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\sunjce_provider.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\sunmscapi.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\sunpkcs11.jarE:\JAVA\jdk1.8.0_171\jre\lib\ext\zipfs.jarE:\JAVA\jdk1.8.0_171\jre\lib\javaws.jarE:\JAVA\jdk1.8.0_171\jre\lib\jce.jarE:\JAVA\jdk1.8.0_171\jre\lib\jfr.jarE:\JAVA\jdk1.8.0_171\jre\lib\jfxswt.jarE:\JAVA\jdk1.8.0_171\jre\lib\jsse.jarE:\JAVA\jdk1.8.0_171\jre\lib\management-agent.jarE:\JAVA\jdk1.8.0_171\jre\lib\plugin.jarE:\JAVA\jdk1.8.0_171\jre\lib\resources.jarE:\JAVA\jdk1.8.0_171\jre\lib\rt.jarE:\code\java\app\out\production\classesE:\ideaIU-2018.1.5.win\lib\idea_rt.jar
加载顺序
- Bootstrap CLassloder
- Extention ClassLoader
- AppClassLoader
