当前位置:   article > 正文

java虚拟机-类加载机制_this.ucp.knowntonotexist

this.ucp.knowntonotexist

目录

虚拟机的类加载机制

Java类加载器

启动类加载器

扩展类加载器 

应用程序类加载器 

双亲委派模型

源码

类加载器运行原理

自定义类加载器


 

虚拟机的类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为类加载器

Java类加载器

Java类加载器(Java Classloader)负责动态地将Java类加载到Java虚拟机的内存空间内, 是Java运行时环境(Java Runtime Environment)的一部分,JVM默认有3个类加载器,每个类加载器负责加载特定位置的Java类

启动类加载器

1、Bootstrap ClassLoader(引导类或启动类加载器)该类加载器通常由C++语言实现,不继承任何Java类,负责加载System.getProperty("sun.boot.class.path")所指定核心Java库也可以通过java -Xbootclasspath指定其搜索路径

  1. public class Test {
  2. public static void main(String[] args) {
  3. System.out.println(System.getProperty("sun.boot.class.path"));
  4. }
  5. }

结果:

  1. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\resources.jar;
  2. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\rt.jar;
  3. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\sunrsasign.jar;
  4. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\jsse.jar;
  5. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\jce.jar;
  6. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\charsets.jar;
  7. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\jfr.jar;
  8. D:\Program_Files\Java\jdk1.8.0_131\jre\classes

扩展类加载器 

2、ExtClassLoader(扩展类加载器)该类加载器由sun.misc.Launcher$ExtClassLoader实现,负责加载System.getProperty("java.ext.dirs")所指定的Java的扩展库也可以通过java -Djava.ext.dirs指定其搜索路径,例如:java -Djava.ext.dirs=d:\classes HelloWorld;注意:如果将自己开发的 jar 文件放在System.getProperty("java.ext.dirs")所指定的目录中,也会被 ExtClassLoader类加载器加载;

  1. public class Test {
  2. public static void main(String[] args) {
  3. System.out.println(System.getProperty("java.ext.dirs"));
  4. }
  5. }

结果:

  1. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext;
  2. C:\Windows\Sun\Java\lib\ext

应用程序类加载器 

3、AppClassLoader(系统类或应用程序类加载器)该类加载器由sun.misc.Launcher$AppClassLoader实现,负责加载System.getProperty("java.class.path")或CLASSPATH环境变量所指定的Java类,也可以加上-cp来覆盖原有的classpath设置,例如: java -cp ./classes HelloWorld;说明:默认情况下自定义类都由该类加载器加载。如果应用程序中没有自定义的类加载器,一般情况下这就是程序中默认的类加载器。

  1. public class Test {
  2. public static void main(String[] args) {
  3. System.out.println(System.getProperty("java.class.path"));
  4. }
  5. }

结果:

  1. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\resources.jar;
  2. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\rt.jar;
  3. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\jsse.jar;
  4. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\jce.jar;
  5. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\charsets.jar;
  6. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\jfr.jar;
  7. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-32.jar;
  8. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;
  9. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;
  10. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;
  11. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;
  12. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;
  13. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;
  14. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;
  15. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;
  16. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;
  17. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;
  18. D:\Program_Files\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;
  19. D:\workspace\test\bin ****自命名类所存在的路径

 

双亲委派模型

Java虚拟机中的所有类加载器采用具有父子关系的树形结构进行组织: 除了顶层的启动类加载器以外,其他的类加载器都应当有自己的父类加载器。

  1. public class Test {
  2. public static void main(String[] args) {
  3. ClassLoader classLoader =Test.class.getClassLoader();
  4. System.out.println(classLoader.getClass().getName());//控制台输出结果sun.misc.Launcher$AppClassLoader
  5. classLoader=classLoader.getParent();
  6. System.out.println(classLoader.getClass().getName());//控制台输出结果sun.misc.Launcher$ExtClassLoader
  7. classLoader=classLoader.getParent(); //(引导类加载器):该类加载器通常由C++语言实现,
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/1006995
推荐阅读
相关标签
  

闽ICP备14008679号