Java类加载器(ClassLoader)是Java虚拟机(JVM)的一个重要组成部分,负责将Java类从.class文件加载到内存中并进行链接、初始化等操作,使得Java程序能够运行。
类加载器的种类及作用
Bootstrap ClassLoader
启动类加载器,是JVM的一部分,用来加载 Java 核心类库,例如 rt.jar 等.
Extension ClassLoader
扩展类加载器,用于加载 Java 扩展类库,例如 jre/lib/ext 目录下的 jar 包
Application ClassLoader
应用程序类加载器,负责加载应用程序 classpath 下的类
自定义类加载器
开发者可以通过继承 ClassLoader 类来实现自定义的类加载器,从而实现一些特定的加载逻辑.
类加载器的本质
类加载器的本质是一个 java 类,继承自 java.lang.ClassLoader
,可以通过继承和重写 java.lang.ClassLoader
类的方法来实现自定义的类加载器。
类加载器是 JVM 的一部分,负责将类的字节码文件加载到 JVM 中。
那么它是如何工作的呢?
类加载过程
- 加载
- 类加载器通过类的全限定名来读取对应的字节码文件,并将字节码转化为JVM中的Class对象.
- 链接 --> 链接分为三个阶段,分别是 验证、准备和解析
- 验证:验证字节码文件是否符合JVM规范
- 准备:为类的静态变量分配内存,并设置默认值
- 解析:将符号引用转化为直接引用,例如字段或者方法的符号转化为对应的内存地址
- 初始化
- 在初始化阶段会执行类的静态代码块,例如初始化静态变量和执行静态方法等
- 使用
- 在该阶段,类已经被完全加载到JVM中了,并可以进行相应的操作,例如创建对象,调用方法等。
双亲委派机制
Java 类加载器采用双亲委派模型来实现类的加载。即当一个类需要被加载时,先委托给父类加载器进行加载,如果父类加载器无法完成加载任务,则交给子类加载器进行加载。这样可以保证类的唯一性和安全性。
标签:初始化,Java,字节,--,ClassLoader,JVM,加载 From: https://blog.51cto.com/u_16079703/7108052