一 虚拟机自己的加载器

启动类加载器(引导类加载器,Bootstrap classloader)
image.png

扩展类加载器

image.png
应用程序类加载器
image.png

  1. public class ClassLoaderTest {
  2. public static void main(String[] args) {
  3. //引导类加载器可加载路径
  4. URL[] urLs = Launcher.getBootstrapClassPath().getURLs();
  5. System.out.println("打印引导类加载器");
  6. for (URL url : urLs){
  7. System.out.println(url);
  8. }
  9. // ..../jdk1.8.0_111.jdk/Contents/Home/jre/lib/rt.jar String在这个rt.jar文件中
  10. ClassLoader bootstrapClassLoader = String.class.getClassLoader();
  11. //因为 bootstrapClassLoader 引导类加载器 是用c++/c编写的所以这边无法拿到对于的对象。会打印null
  12. System.out.println(bootstrapClassLoader);
  13. System.out.println("*****扩展类加载器可加载路径*****");
  14. String extDirs = System.getProperty("java.ext.dirs");
  15. for (String url:extDirs.split(":")){
  16. System.out.println(url);
  17. }
  18. ClassLoader extClassLoader = Pair.class.getClassLoader();
  19. //打印 sun.misc.Launcher$ExtClassLoader@4b67cf4d 所以可以看到是扩展加载器 加载的
  20. System.out.println(extClassLoader);
  21. //其他这些一般就是app加载器了 打印 sun.misc.Launcher$AppClassLoader@7f31245a
  22. ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
  23. System.out.println(classLoader);
  24. }
  25. }

程序运行打印如下:可以发现String是在rt.jar中,Pair是在/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext中的jfxrt.jar下

  1. /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/lib/tools.jar:/Users/djy/WorkFile/learn/jvm/jvm-01/target/classes com.daijunyi.ClassLoaderTest
  2. 打印引导类加载器
  3. file:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/resources.jar
  4. file:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/rt.jar
  5. file:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/sunrsasign.jar
  6. file:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jsse.jar
  7. file:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jce.jar
  8. file:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/charsets.jar
  9. file:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jfr.jar
  10. file:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/classes
  11. null
  12. *****扩展类加载器可加载路径*****
  13. /Users/djy/Library/Java/Extensions
  14. /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/ext
  15. /Library/Java/Extensions
  16. /Network/Library/Java/Extensions
  17. /System/Library/Java/Extensions
  18. /usr/lib/java
  19. sun.misc.Launcher$ExtClassLoader@4b67cf4d
  20. sun.misc.Launcher$AppClassLoader@7f31245a
  21. Process finished with exit code 0