虚拟机类加载机制
一. 加载的时机
(1)new getstatic putstatic invokestatic 对一个类进行 实例化对象 读取或者设置静态属性 调用静态方法
(2)反射
(3)加载一个类时 发现其父类没有初始化
(4)程序入口的类
(5) 动态语言支持
二. 类加载的过程
- 加载
- 通过类的全限定名获取二进制流
- 将流所代表的静态存储结构 转化为方法区的运行时数据结构
- 在方法区生成一个Class类型对象 用于访问这个类的各种数据
- 验证
文件格式 元数据 字节码 符号引用 - 准备
为类变量分配内存 并设置初始值的阶段 - 解析
符号引用转化为直接引用的过程
符号引用: 一组符号来描述所引用的目标 目标可以没加载在内存中
直接引用: 直接指向目标的指针 相对偏移量 内存中已经存在 - 初始化
执行cinit方法
cinit 是由 静态变量赋值语句 和 静态代码块合并起来的 - 使用
- 卸载