2025.02.17笔记 ~ langhai

2025-02-17 22:58:04
JVM
类加载器:用于装载字节码文件 .class文件。
BootStrap ClassLoader 启动类加载器 加载 JAVA_HOME/jre/lib。
ExtClassLoader 扩展类加载器 加载 JAVA_HOM/jre/lib/ext。
AppClassLoader 应用类加载器 用于加载开发者自己编写的Java类。
双亲委派模型
加载某一个类,先委派上一级的加载器进行加载,如果上级加载器也有上级,则会继续向上委托,如果该类委托上级没有被加载,子加载器尝试加载该类。
采用这种机制,可以保证某一个类只被加载一次,避免重复进行加载。当然也可以保证核心类库被恶意修改。
类装载的过程
生命周期 加载 连接 (验证 准备 解析 )初始化 使用 卸载
加载:通过类的全名,获取类的二进制数据流。
验证:验证类是否符合JVM规范,安全性检查。
准备:为类变量分配内存并设置类变量初始值。
解析:把类中的符号引用转换为直接引用。
初始化:对类的静态变量,静态代码块执行初始化操作。
使用:调用静态成员信息 使用new关键字创建对象实例。
卸载:当用户程序代码执行完毕之后,JVM开始销毁创建的Class对象。