Java类加载过程

记录《深入理解Java虚拟机》学习的第七章内容。

Java类的生命周期分为以下几个过程:加载,验证,准备,解析,初始化,使用和卸载。


Java类生命周期

这里主要记录以下Java类的“类加载”过程:加载,验证,准备,解析,初始化。

加载

加载是类加载中的一个过程,这一步主要做3件事:

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

java.lang.Class对象并不一定在Java堆中,hotspot虚拟机是存储在方法区内。
加载完成之后,二进制字节流就存储在方法区中。

验证

连接的第一步,确保Class中的二进制流符合虚拟机的要求。

准备

这一步是为类变量在方法区中分配内存并设置初始值的阶段。

  • 类变量指static变量,实例变量在类的实例化过程中在Java堆中分配内存。
  • 初始化指的是赋零值,而不是指定值。指定值的赋值在类的初始化阶段才会执行,但是对于final类型的类变量,会在准备阶段直接赋值。


    基本数据类型零值

解析

这一步将符号引用转化为直接引用。
符号引用和直接引用之间的区别在于

  • 符号引用以一组符号描述所引用的目标,符号可以是任何形式的字面量,只要能够定位到目标。
  • 直接引用是指向目标的指针,相对偏移量和能够间接定位到目标的句柄。

初始化

初始化阶段是执行类构造器方法的过程。(静态语句块也在这里执行)

你可能感兴趣的:(Java类加载过程)