JVM类加载机制是怎样的?类加载的过程包括哪些阶段?
中等JVM类加载机制
💬0
🔥0
👍0
详细说明JVM的类加载机制,包括类加载器、类加载过程、双亲委派模型等核心概念
参考答案
JVM类加载机制是Java程序运行的基础,通过类加载器将字节码文件加载到内存中:
- 类加载器体系
启动类加载器(Bootstrap ClassLoader)
- 加载Java核心类库
- 由C++实现,是JVM的一部分
- 加载路径:JAVA_HOME/jre/lib
扩展类加载器(Extension ClassLoader)
- 加载Java扩展类库
- 继承自URLClassLoader
- 加载路径:JAVA_HOME/jre/lib/ext
应用类加载器(Application ClassLoader)
- 加载应用程序类
- 继承自URLClassLoader
- 加载路径:CLASSPATH
自定义类加载器
- 继承ClassLoader类
- 实现自定义加载逻辑
- 常用于热部署、插件系统等
- 类加载过程
加载(Loading)
- 通过类名获取类的二进制数据
- 将二进制数据转换为方法区的运行时数据结构
- 在内存中生成Class对象
验证(Verification)
- 文件格式验证:检查字节码文件格式
- 元数据验证:检查语义信息
- 字节码验证:检查程序逻辑
- 符号引用验证:检查符号引用
准备(Preparation)
- 为类变量分配内存
- 设置类变量的初始值(零值)
- 不包括final修饰的常量
解析(Resolution)
- 将符号引用转换为直接引用
- 解析类、接口、字段、方法等
- 可能触发其他类的加载
初始化(Initialization)
- 执行类构造器<clinit>方法
- 为类变量赋初值
- 执行静态代码块
使用(Using)
- 创建对象实例
- 调用类方法
- 访问类变量
卸载(Unloading)
- 类不再被引用时卸载
- 释放方法区内存
- 由垃圾回收器处理
- 双亲委派模型
工作原理
- 类加载器收到加载请求时,先委派给父加载器
- 父加载器无法加载时,才由自己加载
- 形成层次结构,避免重复加载
优势
- 避免重复加载类
- 保护核心类库安全
- 保证类加载的一致性
破坏双亲委派
- 重写loadClass方法
- 使用线程上下文类加载器
- 热部署和热插拔技术
评论区 (0)
暂无评论,来发表第一条评论吧!