• 类加载器知识



    类加载
    当程序要是用某个类时,如果该类还未到加载内存中,则系统会通过 类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或者类初始化

    一. 类的加载

    • 就是指将class文件读入内存,并为之创建一个java.lang.Class对象
    • 任何类被使用时,系统都会为之建立一个java.lang.Class对象

    二. 类的连接

    • 验证阶段:用于检验被加载的类是否有正确的内部结构,并和其他类协调一致
    • 准备阶段:负责为类的类变量分配内存,并设置默认初始化值
    • 解析阶段:将类的二进制数据中的符号引用替换为直接引用

    三. 类的初始化

    • 在该阶段,主要是对类变量进行初始化

    (一) 类的初始化步骤:

    1. 假如类还未被加载或连接,则程序先加载并连接该类
    2. 假如该类的直接父类还未被初始化,则先初始化其直接父类
    3. 假如类中有初始化语句,则系统一次执行这些初始化语句

    注意:在执行第2个步骤的时候,系统对直接父类的初始化步骤也遵循初始化步骤1-3

    (二) 类的初始化时机:

    • 创建类的实例
    • 调用类的类方法
    • 访问类或者接口的类变量,或者为该类变量赋值
    • 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
    • 初始化某个类的子类
    • 直接使用java.exe命令来运行某个主类

    四. 类加载器:

    ClassLoader:是负责加载类的对象

    (一) 类加载器的作用:

    • 负责将.class文件加载到内存中,并为之生成对应的java.lang.Class对象

    ## (四) JVM的类加载机制

    (二) JVM类加载机制:

    • 全盘负责
    • 父类委托
    • 缓存机制

    (三) Java运行时具有以下内置类加载器:

    在这里插入图片描述

    • Bootstarp class loder:它是虚拟机的内置类加载器,通常表示为null,并且没有null
    • Platform class loader:平台类加载器可以看到所有平台类,平台类包括由平台类加载器或其祖宗定义的Java SE平台API,其实现类和JDK特定工具上的类
    • System class lodader:它也被称为应用程序类加载器,与平台类加载器不同。系统类加载器通常用于定义应用程序类路径,模块路径和JDK特定工具上的类
    • 类加载器的继承关系:System的父加载器为Platform,而Platform的父加载器为Bootstarp

    (四) ClassLoader中的两个方法:

    在这里插入图片描述

    static ClassLoader getSystemLoader():返回用于委派的系统类加载器
    ClassLoader getParent():返回父类加载器进行委派

    package Demo;
    
    public class ClassLoaderDemo {
        /*
        static ClassLoader getSystemLoader():返回用于委派的系统类加载器
        ClassLoader getParent():返回父类加载器进行委派
    */
    
        public static void main(String[] args) {
    //        static ClassLoder getSystemLoader():返回用于委派的系统类加载器
            ClassLoader c = ClassLoader.getSystemClassLoader();
            System.out.println(c);//AppClassLoader
    
    //        ClassLoader getParent():返回父类加载器进行委派
            ClassLoader c2 = c.getParent();
            System.out.println(c2);//PlatformClassLoader
    
            ClassLoader c3 = c2.getParent();
            System.out.println(c3);//null
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

  • 相关阅读:
    操作系统4小时速成:进程同步,临界资源,互斥,信号量的作用,死锁产生的四个条件,安全状态,银行家算法
    Python编程实例-Pandas快速入门
    MySQL面试题——隔离级别相关面试题
    java.lang.StackOverflowError
    HarmonyOS开发实战(黑马健康系列一:欢迎页)
    极智AI | 昇腾 CANN ATC 模型转换
    vue下载在前端存放的pdf文件
    logstash 多行合并
    分析设备树文件
    Jenkins项目中有中文文件出错处理
  • 原文地址:https://blog.csdn.net/o676448/article/details/126053989