三个加载器类

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的现象。

  1. //Bootstrap CLassloder
  2. System.out.println(System.getProperty("sun.boot.class.path"));
  3. E:\JAVA\jdk1.8.0_171\jre\lib\resources.jar;
  4. E:\JAVA\jdk1.8.0_171\jre\lib\rt.jar;
  5. E:\JAVA\jdk1.8.0_171\jre\lib\sunrsasign.jar;
  6. E:\JAVA\jdk1.8.0_171\jre\lib\jsse.jar;
  7. E:\JAVA\jdk1.8.0_171\jre\lib\jce.jar;
  8. E:\JAVA\jdk1.8.0_171\jre\lib\charsets.jar;
  9. E:\JAVA\jdk1.8.0_171\jre\lib\jfr.jar;
  10. E:\JAVA\jdk1.8.0_171\jre\classes

Extention ClassLoader 扩展的类加载器

加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。还可以加载-D java.ext.dirs选项指定的目录。

  1. //Extention ClassLoader Launcher.ExtClassLoader
  2. System.out.println(System.getProperty("java.ext.dirs"));
  3. E:\JAVA\jdk1.8.0_171\jre\lib\ext;
  4. C:\windows\Sun\Java\lib\ext

Appclass Loader

也称为SystemAppClass 加载当前应用的classpath的所有类。

  1. //Launcher.AppClassLoader
  2. String str=System.getProperty("java.class.path");
  3. String [] strs=str.split(";");
  4. for (int i=0;i<strs.length;i++){
  5. System.out.println(strs[i]);
  6. }
  7. E:\JAVA\jdk1.8.0_171\jre\lib\charsets.jar
  8. E:\JAVA\jdk1.8.0_171\jre\lib\deploy.jar
  9. E:\JAVA\jdk1.8.0_171\jre\lib\ext\access-bridge.jar
  10. E:\JAVA\jdk1.8.0_171\jre\lib\ext\cldrdata.jar
  11. E:\JAVA\jdk1.8.0_171\jre\lib\ext\dnsns.jar
  12. E:\JAVA\jdk1.8.0_171\jre\lib\ext\jaccess.jar
  13. E:\JAVA\jdk1.8.0_171\jre\lib\ext\jfxrt.jar
  14. E:\JAVA\jdk1.8.0_171\jre\lib\ext\localedata.jar
  15. E:\JAVA\jdk1.8.0_171\jre\lib\ext\nashorn.jar
  16. E:\JAVA\jdk1.8.0_171\jre\lib\ext\sunec.jar
  17. E:\JAVA\jdk1.8.0_171\jre\lib\ext\sunjce_provider.jar
  18. E:\JAVA\jdk1.8.0_171\jre\lib\ext\sunmscapi.jar
  19. E:\JAVA\jdk1.8.0_171\jre\lib\ext\sunpkcs11.jar
  20. E:\JAVA\jdk1.8.0_171\jre\lib\ext\zipfs.jar
  21. E:\JAVA\jdk1.8.0_171\jre\lib\javaws.jar
  22. E:\JAVA\jdk1.8.0_171\jre\lib\jce.jar
  23. E:\JAVA\jdk1.8.0_171\jre\lib\jfr.jar
  24. E:\JAVA\jdk1.8.0_171\jre\lib\jfxswt.jar
  25. E:\JAVA\jdk1.8.0_171\jre\lib\jsse.jar
  26. E:\JAVA\jdk1.8.0_171\jre\lib\management-agent.jar
  27. E:\JAVA\jdk1.8.0_171\jre\lib\plugin.jar
  28. E:\JAVA\jdk1.8.0_171\jre\lib\resources.jar
  29. E:\JAVA\jdk1.8.0_171\jre\lib\rt.jar
  30. E:\code\java\app\out\production\classes
  31. E:\ideaIU-2018.1.5.win\lib\idea_rt.jar

加载顺序

  1. Bootstrap CLassloder
  2. Extention ClassLoader
  3. AppClassLoader