Code前端首页关于Code前端联系我们

Java面试题:JVM的原理类文件加载机制?

terry 2年前 (2023-09-25) 阅读数 61 #后端开发

问题:描述一下JVM加载class文件的原理和机制?

答:JVM中类的加载是由类加载器(ClassLoader)及其子类实现的。 Java中的类加载器是Java运行时系统的一个重要组件。它负责从类文件中查找并加载类。
由于Java的跨平台特性,编译后的Java源程序并不是可执行程序,而是一个或多个类文件。当Java程序需要使用特定的类时,JVM将确保该类已被加载、链接(验证、准备和解析)和初始化。类加载是指将类的.class文件中的数据读取到内存中。通常会创建一个字节数组来读取.class文件,然后生成与加载的类对应的Class对象。当加载完成时,类对象还不完整,因此此时类不可用。类加载后,就进入链接阶段,该阶段包括三个步骤:验证、准备(为静态变量分配内存并设置默认初始值)和解析(用直接引用替换符号引用)。最后,JVM对类进行初始化,包括: 1)如果该类有直接父类且该类尚未初始化,则先初始化父类; 2) 如果类中有初始化语句,则按顺序执行这些初始化语句。
类加载由类加载器完成,类加载器包括:根加载器(BootStrap)、扩展加载器(extension)、系统加载器(system)、自定义类加载器(java.lang .ClassLoader子类)。基于Java 2(JDK 1.2),类加载过程使用父委托机制(PDM)。 PDM 确保 Java 平台上更好的安全性。在这种机制中,JVM自己的Bootstrap是根加载器,其他加载器只有一个父类加载器。类的加载首先需要父类加载器加载,只有当父类加载器无能为力时,其子类加载器才自行加载。JVM不会提供 Bootstrap for Java 程序的参考。下面是几个类加载器的说明:

  • Bootstrap:一般在本地代码中实现,负责加载JVM的基础核心类库(rt.jar);
  • 扩展名:由java.ext.dirs系统属性指定类库加载到该文件夹​​中,其父加载器为Bootstrap;
  • System:也称为应用程序类加载器,它的父类是Extension。它是使用最广泛的一类加载器。它从 classpath 环境变量或 java.class.path 系统属性指定的目录加载类,并且是自定义加载器的默认加载器。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门