JVM(一)类加载阶段分解

类加载器深入解析与阶段分解

类加载阶段

  • 在Java代码中,类型加载,连接初始化过程都是在程序运行期间完成
  • 提供了更大的灵活性,增加了更多的可能性

加载

  • 将已存在的磁盘的类的class文件加载到内存中

连接

  • 对字节码的处理,验证,校验
  • 类与类之间的符号引用转为直接引用

初始化

  • 对于静态变量进行赋值

JVM规范对类加载的阶段进行了约束,但是具体情况需要根据运行时的JVM环境进行判断.

结束生命周期的情况

  • System.exit()
  • 程序正确执行结束
  • 执行过程中遇到了异常或者错误而终止
  • 由于操作系统出现错误而导致java虚拟机进程终止

类的加载,连接与初始化

加载

查找并加载类的二进制数据

连接

细分过程

  • 验证:确保必备加载的类正确性

    确保没有篡改,正确性

  • 准备:为类的静态变量分配内存,并将其初始化为默认值

    在准备阶段,并不会将具体值赋值给变量,在如下代码中,在准备阶段会将a初始化为默认值0

    class Test{
      public static int a = 1;
    }
    
  • 解析:把类的符号引用转为直接引用

    • 符号引用:可以理解为间接的方式引用,譬如一个类的方法引用的另一个类
    • 直接引用:直接将方法通过指针的方式指向目标对象的内存
初始化

为类的静态变量赋予正确的初始值

使用

程序正常使用类,平常打交道的阶段

卸载

从内存中卸载类,卸载之后就不能使用,但是也能重新加载到内存.例如OSGI

类加载流程图
2786935-9234c5840da4d550.png
类加载流程图
2786935-09d3bcd53f5ddbdf.png
类加载的各个流程

类加载的最终产物

类的加载最终产物是位于内存中的Class对象
Class对象封装了类在方法区内的数据结构,并且向Java开发人员访问方法区内的数据结构的接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值