JVM的类加载机制
一、JVM的运行机制
JVM 是用于运行Java字节码的虚拟机,包括一套字节码指令集,一组程序寄存器,一个虚拟机栈,一个虚拟机堆,一个方法区和一个垃圾回收器。JVM运行在操作系统之上,不与硬件设备直接交互;
Java程序具体运行过程:
- JAVA源文件被编译器编译成字节码文件
- JVM将字节码文件编译成相应操作系统的机器码
- 机器码调用相应操作系统的本地方法库执行相应的方法
二、JVM的类加载机制
1.JVM的类加载阶段
- 加载
- 验证
- 准备
- 解析
- 初始化
在类初始化完成后就可以使用该类的信息,不用则从JVM卸载;
2.类加载器
JVM提供三种类加载器
- 启动类加载器
- 扩展类加载器
- 应用程序类加载器
- 除了上面三种,还可以继承
java.lang.ClassLoader
实现自己定义的类加载器
3. 双亲委派机制
简单说:儿子找爸爸,爸爸找爷爷
*所有的类都会委派到类加载器*
-
启动类加载器—
%JAVA_HOME/lib
路径下的jar包 -
扩展类加载器—
%JAVA_HOMEjre/lib/ext
路径下的jar包 -
应用程序类加载器—在
CLASSPATH
路径下指定 -
自定义的类加载器—加载用户自定义目录下的Class文件
双亲委派机制的核心就是保障类的唯一性和安全性(唯一:无论是那个类加载器加载类,最后都交给启动器类加载器加载;安全性:JVM不允许存在相同包名跟类名)