Java、Android:类加载器认识论,认识类加载顺序再也不容易被问倒
2023-12-30 03:02:45
在我们的应用程序中,所有的类、接口以及其他资源都以class文件的方式存储在磁盘上,它们都是以字节码的形式,包括变量、方法、继承关系等信息, 而在程序运行时,JVM并不直接使用class文件,而是在启动阶段,由类加载器将这些class文件载入到内存,并完成一系列检查,比如数据格式、语法等。然后再执行。
什么是类加载器
类加载器在JVM中是一个基础模块,负责加载class文件并将其转换成能被JVM执行的结构,它将类的信息从磁盘文件加载到JVM的内存中,并对其进行验证、准备、解析和初始化等一系列处理,然后将字节码解析成特定操作系统平台上的可执行机器指令,并存储在JVM的运行时数据区的方法区中,以便虚拟机将来执行。
在运行时,类加载器会首先检查JVM内存中是否有已经加载的该类,如果没有,类加载器会从磁盘文件中加载该类的字节码,并将其转换为JVM可以执行的代码,最后将其存储在JVM的内存中。
类加载器的类型
Java的类加载器分为以下几种类型:
- 应用程序类加载器:负责加载应用程序代码的类加载器。
- 系统类加载器:负责加载系统代码的类加载器。
- 启动类加载器:负责加载Java虚拟机启动时需要的类的类加载器。
类加载器可以加载指定路径下的类文件,当类加载器加载一个类时,它会先检查该类是否已经被加载,如果没有,它会从指定路径下加载该类的字节码文件。
类加载器的生命周期
在Java中,类加载器的生命周期与Java应用程序的生命周期相同。当Java应用程序启动时,就会创建应用程序类加载器,它负责加载应用程序代码。当应用程序结束时,应用程序类加载器就会被销毁。
类加载器的层次结构
Java的类加载器按照层次结构划分,分为以下几个层次:
- 启动类加载器
- 扩展类加载器
- 应用程序类加载器
应用程序类加载器是Java应用程序中主要的类加载器,它负责加载应用程序代码。启动类加载器负责加载Java虚拟机启动时需要的类,包括java.lang
包中的类以及其他一些基本的类。扩展类加载器负责加载Java扩展包中的类,包括java.sql
包中的类以及其他一些常见的类。
类加载器的双亲委派模型
类加载器之间存在着双亲委派模型。当一个类加载器加载一个类时,它会先检查该类是否已经被其父类加载器加载。如果没有,它就会委托其父类加载器加载该类。这样可以避免多个类加载器加载同一个类,造成类冲突。
类加载器的作用
类加载器在Java虚拟机中扮演着重要的角色,主要作用有:
- 加载类文件
- 验证类文件
- 准备类文件
- 解析类文件
- 初始化类文件
通过类加载器将类文件加载到Java虚拟机内存中,并对类文件进行必要的检查和准备,使类文件可以被Java虚拟机执行。
结语
类加载器是Java虚拟机中一个重要的模块,它负责将类文件加载到内存中,并对其进行必要的检查和准备,使类文件可以被Java虚拟机执行。类加载器还可以根据类之间的依赖关系来控制类的加载顺序,从而保证Java程序的正确运行。