三个加载器类
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 CLassloder
System.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.ExtClassLoader
System.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.AppClassLoader
String 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.jar
E:\JAVA\jdk1.8.0_171\jre\lib\deploy.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\access-bridge.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\cldrdata.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\dnsns.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\jaccess.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\jfxrt.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\localedata.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\nashorn.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\sunec.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\sunjce_provider.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\sunmscapi.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\sunpkcs11.jar
E:\JAVA\jdk1.8.0_171\jre\lib\ext\zipfs.jar
E:\JAVA\jdk1.8.0_171\jre\lib\javaws.jar
E:\JAVA\jdk1.8.0_171\jre\lib\jce.jar
E:\JAVA\jdk1.8.0_171\jre\lib\jfr.jar
E:\JAVA\jdk1.8.0_171\jre\lib\jfxswt.jar
E:\JAVA\jdk1.8.0_171\jre\lib\jsse.jar
E:\JAVA\jdk1.8.0_171\jre\lib\management-agent.jar
E:\JAVA\jdk1.8.0_171\jre\lib\plugin.jar
E:\JAVA\jdk1.8.0_171\jre\lib\resources.jar
E:\JAVA\jdk1.8.0_171\jre\lib\rt.jar
E:\code\java\app\out\production\classes
E:\ideaIU-2018.1.5.win\lib\idea_rt.jar
加载顺序
- Bootstrap CLassloder
- Extention ClassLoader
- AppClassLoader