类加载的过程

来源:互联网 发布:重庆医科大学网络教育 编辑:程序博客网 时间:2024/05/21 15:59

@(Java虚拟机)[java, 虚拟机, Java]

加载

在加载阶段完成以下3件事情:

  1. 通过一个类的全限定名来获取定义此类的二进制字节流
  2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
  3. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

验证

是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息法和当前虚拟机的要求,并且不会危害虚拟机自身的安全。

验证阶段大致会完成下面4个阶段的检验动作:文件格式验证元数据验证字节码验证符号引用验证

  • 第一阶段:要验证字节流是否符合Class文件格式的规范,并且能被当前版本的虚拟机处理。
  • 第二阶段:对字节码描述的信息进行语义分析,以保证器描述的信息法和Java语言规范的要求。
  • 第三阶段:是整个验证过程中最复杂的一个阶段,主要慕斯是通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。
  • 第四阶段;检验发生正在虚拟机将符号引用转化为直接引用的时候,这个转化动作将在连接第三阶段–解析阶段中发生。

准备

是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。

解析

是虚拟机将常量池内的符号引用替换为直接引用的过程

  • 符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。
  • 直接引用可以直接执行目标的指针、相对偏移量或是一个能直接定为到目标的句柄。

分为类或接口的解析、字段解析、类方法解析、接口方法解析

初始化

到了初始化阶段,才真正开始执行类中定义的Java代码。

分派是重写和重载的概念

0 0
原创粉丝点击