码上敲享录 > java面试题及答案大全 > Java 类加载过程是怎么样的?

Java 类加载过程是怎么样的?

上一章章节目录下一章 2023-07-12已有246人阅读 评论(0)

Java类加载过程是指将类的字节码文件加载到Java虚拟机(JVM)中并转换为可执行的Java类的过程。Java类加载器(ClassLoader)负责类加载,并按照特定的规则和顺序完成以下步骤:


1. 加载(Loading):类加载的第一阶段是加载类的字节码文件。通过类的全限定名(包括包路径)找到类的字节码文件,并将其读取到内存中。


2. 验证(Verification):在验证阶段,对加载的字节码进行各种验证以确保其正确性和安全性。验证过程包括字节码的格式验证、语义验证、操作数校验等。


3. 准备(Preparation):在准备阶段,为类中的静态变量分配内存空间并设置默认初始值。这些变量包括静态变量和静态常量。


4. 解析(Resolution):在解析阶段,将符号引用转换为直接引用。符号引用指的是用符号表示的方法、字段、类等,而直接引用是内存地址的指针。


5. 初始化(Initialization):在初始化阶段,执行类的初始化代码,包括静态变量的赋值和静态代码块的执行。当类被首次主动使用时,即触发初始化,而被动使用(如引用常量)不会触发初始化。


6. 使用(Usage):在类加载完成后,可以使用类来创建对象、调用方法等。


7. 卸载(Unloading):当类不再被引用、程序结束或者类的加载器被回收时,类可能会被卸载(从内存中移除)。


值得注意的是,Java类加载过程是按需加载的,即在程序运行时根据需要动态加载类。类加载器根据类的引用关系、访问路径和配置进行类的加载和链接。


此外,Java中有三种内置的类加载器:


1. Bootstrap ClassLoader:负责加载Java的核心类库,如`java.lang`等。它是虚拟机的一部分,是用本地代码实现的,不继承自`java.lang.ClassLoader`。


2. Extension ClassLoader:负责加载Java的扩展类库,即`jre/lib/ext`目录下的类库。它是由 `sun.misc.Launcher$ExtClassLoader` 实现的。


3. Application ClassLoader:也称为 System ClassLoader,负责加载应用程序中的类。它是由 `sun.misc.Launcher$AppClassLoader` 实现的,是用户自定义的类加载器。


这些类加载器按照父子关系形成了类加载器层次结构,可以根据需要自定义类加载器以实现特定的加载需求。


这是Java类加载过程的基本概述。类加载是Java虚拟机的重要组成部分,它使得动态加载和扩展成为可能,并提供了灵活性和可控性。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交