首页 > 编程知识 正文

jvm加载class原理面试,面试题jvm类加载机制原理

时间:2023-05-04 19:39:23 阅读:32572 作者:587

#虚拟机类加载机制

---

*虚拟机将描述类的数据从Class文件加载到内存中,进行数据验证、转换分析和初始化,最终形成可直接在Java虚拟机中使用的Java类型。 这就是虚拟机的类加载机制。 **

从类加载到虚拟内存到卸载内存的整个生命周期,包括“加载”(Loading )、“验证”(Verification )、“准备”(Preparation )分析(Resolution )、“初始化”(iid )

###类加载过程

类加载的全过程、加载、验证、准备、分析和初始化五个阶段。

---

####加载

在加载阶段,虚拟机需要完成以下三项:

*定义类的二进制字节流是用类的完全限定名检索的

*将此字节流表示的静态存储结构转换为方法区域的运行时数据结构

*在Java堆中生成表示此类的java.lang.Class对象,作为访问方法区域中这些数据的入口

####验证

此阶段的目的是确保Class文件字节流中包含的信息满足当前虚拟机的要求,并且不会破坏虚拟机本身的安全性。 虽然类验证的实现可能因虚拟机而异,但验证过程分为四个阶段:文件格式验证、元数据验证、字节码验证和符号引用验证。

**文件格式验证*

在第一个阶段,验证字节流是否符合Class文件格式规范,并且可以由当前版本的虚拟机处理。

**元数据验证*

第二阶段是对字节码描述的信息进行语义分析,确保描述的信息满足Java语言规范的要求。

**字节码验证*

在第三阶段验证过程中最复杂的阶段,主要工作是数据流和控制流的分析。 第二阶段完成元数据信息中数据类型的检查后,在此阶段对类的方法主体进行检查分析。 此阶段的任务是防止经过验证的类的方法在运行时发生危害虚拟机安全的行为。

**符号参照验证*

最后一个阶段的验证发生在虚拟机将符号引用直接转换为引用时,此转换操作发生在连接的第三个阶段—分析阶段。 符号引用验证可以认为是对类本身以外的信息(参见常量池中的各种符号)的一致性的检查。

###

准备阶段是正式为类变量分配内存并设置类变量的初始值的阶段,所有这些内存都在方法区域分配。

####分析

解析阶段是虚拟机将常量池中的符号引用直接转换为引用的过程。 分析行为主要针对类或接口、字段、类方法、接口方法四种符号引用。

分析类或接口

*字段分析

类方法分析

接口方法分析

###初始化

在前一类的加载过程中,其馀行为完全由Java虚拟机主导和控制,但在加载阶段,用户APP应用程序可以通过自定义类加载器参与。 只有在初始化阶段,才能真正开始执行类中定义的Java程序代码(或字节码)。 在准备阶段,变量被分配了一次系统要求的初始值,但在初始化阶段,程序员会根据程序中创建的主观计划初始化类变量和其他资源。 或者,初始化阶段可以是类构造函数(

###类装载机

---

####类和类加载器

虚拟机设计团队在类加载阶段将“获取用类的完全限定名称描述类的二进制流”操作放在Java虚拟机外部并实施,以便可以自行决定程序如何获取需要的类。 实现这种行为的代码模块称为“类加载器”。

####父母委托模型

站在Java虚拟机的立场上,只有两种不同的类加载器。 一种是启动类加载器(Bootstrap ClassLoader ),该类加载器以c语言实现,是虚拟机本身的一部分。 另一个是以Java语言实现的、独立于虚拟机且从抽象类java.lang.ClassLoader继承的所有其他类加载程序。 在Java开发人员看来,类加载器可以划分得更细。 大多数Java程序使用以下三个系统提供的类加载器:

*启动类装载机

*扩展类加载器

* APP应用程序类加载器

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。