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

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

1.类加载

  • 在Java代码中,类型的加载、连接、初始化过程都是在运行期间完成的。

    ​ 这里的类型指的是:object本身,并不是表示object对象。

    ​ 这个类型大多数情况下载运行之前都是编辑好的,如:类jdk提供的object,也可以是在运行期间生成的,如:动态代理:在程序运行期间创建的。

  • 提供了更大的灵活性,增加了更多的可能性。

2.类加载器深入剖析

每一个类都是由类加载器加载到内存当中的。

  • Java虚拟机与程序的生命周期
  • 在如下几种情况下,Java虚拟机将结束生命周期:
    1. 执行了System.exit()方法;
    2. 程序正常执行结束;
    3. 程序在执行过程中遇到了异常或者错误而异常终止;[就是异常一直往外抛,抛到main方法,就结束啦!]
    4. 由于操作不当出现错误而导致Java虚拟机进程终止。

3.类的加载、连接与初始化

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

    ​ 就是把类的class文件加载到内存中。

  • 连接:

    • 验证:确保被加载的类的正确性;

      ​ 就是验证字节码的格式,字节码没有被恶意的篡改,符合JVM对于字节码的格式要求。

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

      ​ 在这个阶段,为类的静态变量开辟内存区域,类还不存在对象。而设置为默认值,如:int变量的默认值为 0 ,boolean的默认值为 false,引用的默认值为null。

    • 解析:把类中的符号引用转换为直接引用。

      int a = 3;
      int b = a;
      
  • 初始化:为类的静态变量赋予正确的初始值。

    如:int a = 3;
    在连接的准备期间,赋予的是默认值 a = 0 ,初始化阶段,就赋予正确的初始值 a = 3
    

4.类的使用与卸载

  • 使用

    ​ 如:类的创建对象, 调用类的一些相关方法。

  • 卸载

    ​ 从内存中卸载,再想使用,需要重新加载到内存中。
    在这里插入图片描述

发布了12 篇原创文章 · 获赞 0 · 访问量 231

猜你喜欢

转载自blog.csdn.net/qq_40574305/article/details/104782866
今日推荐