JVM加载class文件的原理机制

Java虚拟机(JVM)是运行Java程序的关键组成部分,它能够动态地加载、解析和执行Java Class文件。Java的跨平台性就是建立在JVM能够解释并执行Class文件的基础上的。

JVM加载class文件的过程基本包括以下几个步骤:

1.类加载:JVM首先通过类加载器(ClassLoader)将Java类加载到内存中,类加载器是一种从文件系统、JAR包或者其他地方查找和加载所需的class文件的机制。类加载器可以根据类的全名加载Java类,但是对于同一个类名,不同的类加载器可能会加载不同的类。Java虚拟机规范规定了三种类加载器:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)、系统类加载器(System ClassLoader)。

2.链接:类加载完成后,JVM会对类进行链接,分为验证、准备和解析三个阶段。验证阶段主要对Java类的结构进行验证;准备阶段主要给类静态变量分配内存并设置初始值;解析阶段主要将类或接口的二进制数据中对其他类或接口的引用转化为直接引用。

3.初始化:类加载和链接完成后,JVM会对类进行初始化。在初始化阶段,类的静态变量和静态内部类会被初始化,静态初始化块会被执行,父类和接口也会被初始化。

当类运行到需要使用某个类的时候,JVM会根据类装载器的定义规则,先检查是否已经装载过这个类,如果没有,则会加载这个类。类装载器会先在缓存区中查找是否已经装载过该类,如果没有,则通过其内部的父类加载器进行装载。如果所有的父类装载器都无法找到要装载的类,那么会调用自己的findClass方法进行装载。最终,通过类装载器装载并生成的类,会被存储在JVM的方法区中,供程序运行时使用。

总体来说,JVM通过使用类装载器和类的链接和初始化来完成Java类的动态加载、解析和执行操作。通过这些机制,JVM能够很好地实现Java的跨平台性,使Java能够在不同的操作系统和硬件平台上运行。

JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明: Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar); Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap; System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变 量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认 父加载器。

总体来说,JVM通过使用类装载器和类的链接和初始化来完成Java类的动态加载、解析和执行操作。通过这些机制,JVM能够很好地实现Java的跨平台性,使Java能够在不同的操作系统和硬件平台上运行。

JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明: Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar); Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap; System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变 量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认 父加载器。

=================

1.类加载:JVM首先通过类加载器(ClassLoader)将Java类加载到内存中,类加载器是一种从文件系统、JAR包或者其他地方查找和加载所需的class文件的机制。类加载器可以根据类的全名加载Java类,但是对于同一个类名,不同的类加载器可能会加载不同的类。Java虚拟机规范规定了三种类加载器:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)、系统类加载器(System ClassLoader)。

2.链接:类加载完成后,JVM会对类进行链接,分为验证、准备和解析三个阶段。验证阶段主要对Java类的结构进行验证;准备阶段主要给类静态变量分配内存并设置初始值;解析阶段主要将类或接口的二进制数据中对其他类或接口的引用转化为直接引用。

3.初始化:类加载和链接完成后,JVM会对类进行初始化。在初始化阶段,类的静态变量和静态内部类会被初始化,静态初始化块会被执行,父类和接口也会被初始化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农落落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值