Java类加载器是Java语言的核心组件之一,它负责在运行时将字节码转换为JVM可以执行的代码。这个过程被称为类加载。在这个过程中,类加载器执行了三个主要步骤:装载、链接和初始化。

装载是指找到特定的.class文件,并从这个文件中创建一个新的java.lang.Class对象。链接则包括验证、准备和解析三步,验证确保了代码不会破坏JVM;准备阶段会分配内存给静态变量并设置默认值;解析阶段则将符号引用转换为直接引用。最后,在初始化阶段,静态变量被赋予它们真正的值,并且静态块被执行。

Java有四种不同类型的类加载器:启动(Bootstrap)、扩展(Extension)、系统(System)以及用户自定义(User-defined)。

  1. 启动类加载器(Bootstrap ClassLoader):负责将 <JAVA_HOME>/lib下面所有jar包或者目录下面扩展名为.class 的文件装入 JVM。
  2. 扩展类加载器(Extension ClassLoader):负责将 <JAVA_HOME>/lib/ext目录下所有jar包或者目录下面扩展名为.class 的文件装入 JVM。
  3. 系统/应用程序 类加 载 器 (System/Application ClassLoader) : 负责 将 系统 类路径 (CLASSPATH ) 中 指定 的 所有 jar 包 或者 目录 下面 扩展名 为 .class 的 文件 装入 JVM 。
  4. 用户自定义类加载器(User-defined ClassLoader):用户可以继承java.lang.ClassLoader类,实现自己的类加载器。

每个Java应用至少有一个类加载器,即系统或应用程序的类加载器。当我们运行一个Java程序时,JVM首先会使用启动和扩展的类加载器来装载核心库。然后系统或应用程序的ClassLoader会装载我们代码中引入的库。

用户自定义ClassLoader可以让我们更加灵活地控制如何装载和管理代码。例如,在一些Web服务器中就使用了这种方式来实现热部署功能。

值得注意是,在Java中存在着双亲委派模型(Parent Delegation Model)。这个模型规定了一个子ClassLoader在尝试去查找某个class时,首先会将这个任务委派给它父级去完成。只有当父级找不到或者不能满足需求时,子级才会尝试去查找。

双亲委派模型保证了一种层次关系,并且避免了重复装载同样名称(包括包名)但是来源不同路径下.class文件造成冲突问题,并且也保证核心API不能被篡改、替换以确保JVM稳定运行。

总的来说,Java类加载器在Java程序运行时起着至关重要的作用。它不仅负责装载类,还负责链接和初始化这些类。理解其工作原理和使用方式,对于深入理解Java语言以及开发高效、安全的应用程序都是非常有帮助的。

云服务器推荐

蓝易云国内/海外高防云服务器推荐


海外免备案云服务器链接:www.tsyvps.com

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。


百度搜索:蓝易云

蓝易云是一家专注于香港及国内数据中心服务的提供商,提供高质量的服务器租用和云计算服务、包括免备案香港服务器、香港CN2、美国服务器、海外高防服务器、国内高防服务器、香港VPS等。致力于为用户提供稳定,快速的网络连接和优质的客户体验。
最后修改:2023 年 10 月 11 日
如果觉得我的文章对你有用,请随意赞赏