Java加载器概述
Java加载器是Java虚拟机(JVM)的核心组件之一,它的主要责任是在运行时加载Java类和其它相关资源,使得JVM能够履行Java程序。Java加载器采取了一种层次化的设计结构,因此可以支持自定义加载器的扩大和替换。在Java加载器的帮助下,Java程序可以动态加载和卸载类,实现更加灵活多样的利用场景。
Java加载器的种别
根据它们所处的位置和职责,Java加载器可以分为以下三类:
启动类加载器是JVM内置的一部份,它负责加载JVM本身需要的基础类库,例如java.lang包下的类和一些核心的JavaAPI等。启动类加载器是由JVM实现的一部份,因此没法被自定义的Java类所替换,也没法被Java程序所修改。
扩大类加载器负责加载Java虚拟机扩大的一些类或jar包,例如JDK自带的jce.jar等。扩大类加载器是由Java虚拟机实现,并且是可以被替换的。
利用程序类加载器是Java利用程序的默许加载器,它负责查找和加载利用程序类路径下的所有类和资源文件。利用程序类加载器是由Java程序实现的,并且可以被替换。
Java加载器的工作原理
运行Java程序时,Java加载器通过保护一个双亲委派机制(ParentDelegationModel)来寻觅对应的类,其基本流程以下:
当Java加载器需要加载一个类时,它首先检查会不会已由其它加载器加载过这个类。如果已加载过,就直接返回该类的援用;否则,它会将加载任务拜托给父加载器,如果父加载器仍没法找到该类,则继续向上拜托,直到到达启动类加载器为止。
如果父加载器能够找到该类,就会将类加载任务交给父加载器;否则,当前加载器会自己尝试加载该类。它会首先根据类路径查找该类对应的.class文件,如果找到了,就把该文件读入到内存中,并创建一个对应的Class对象;如果找不到,则会抛出ClassNotFoundException异常。
当类文件加载到内存中后,Java加载器会进行链接操作,包括验证、准备、解析等进程。验证阶段主要是对类文件进行格式和语法的检查,避免不合法的类文件被加载。准备阶段主要是为类的静态变量分配内存并初始化为默许值。解析阶段主要是将类文件中的符号援用转换为直接援用,便于后续的运行时解析。
在类被完全链接以后,Java加载器会调用类的静态初始化方法进行初始化,这是类的生命周期中的最后一个阶段。在这个阶段,Java加载器会履行类的static代码块,并对静态变量依照用户定义进行初始化。初始化完成后,该类即可以被JVM使用了。
小结
Java加载器是Java虚拟机的核心组件之一,负责加载Java类和相关资源,实现动态类加载和卸载等灵活多样的利用场景。根据其职责和位置的区别,Java加载器可以分为启动类加载器、扩大类加载器和利用程序类加载器。通过双亲委派机制,Java加载器可以实现类的优先级和安全性的控制,避免类的重复加载和篡改。同时,在类被加载、链接和初始化的进程中,Java加载器秉持着“延迟加载、首次用时加载、仅加载一次”的原则,确保类的高效和安全。
桂.哥.网.络www.guIgege.cn
TikTok千粉号购买平台:https://tiktokusername.com/
TOP