iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JVM类加载过程是怎样的
  • 764
分享到

JVM类加载过程是怎样的

2023-06-02 13:06:20 764人浏览 独家记忆
摘要

小编给大家分享一下JVM类加载过程是怎样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!类加载过程Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机

小编给大家分享一下JVM类加载过程是怎样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

类加载过程

Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?

系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析

解析

解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用限定符7类符号引用进行。

符号引用就是一组符号来描述目标,可以是任何字面量。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。在程序实际运行时,只有符号引用是不够的,举个例子:在程序执行方法时,系统需要明确知道这个方法所在的位置。Java 虚拟机为每个类都准备了一张方法表来存放类中所有的方法。当需要调用一个类的方法的时候,只要知道这个方法在方发表中的偏移量就可以直接调用该方法了。通过解析操作符号引用就可以直接转变为目标方法在类中方法表的位置,从而使得方法可以被调用。

综上,解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,也就是得到类或者字段、方法在内存中的指针或者偏移量。

初始化

初始化是类加载的最后一步,也是真正执行类中定义的 Java 程序代码(字节码),初始化阶段是执行类构造器 <clinit> ()方法的过程。

对于<clinit>() 方法的调用,虚拟机会自己确保其在多线程环境中的安全性。因为 <clinit>() 方法是带线程安全,所以在多线程环境下进行类初始化的话可能会引起死锁,并且这种死锁很难被发现。

对于初始化阶段,虚拟机严格规范了有且只有5种情况下,必须对类进行初始化:

  1. 当遇到 new 、 getstatic、putstatic或invokestatic 这4条直接码指令时,比如 new 一个类,读取一个静态字段(未被 final 修饰)、或调用一个类的静态方法时。

  2. 使用 java.lang.reflect 包的方法对类进行反射调用时 ,如果类没初始化,需要触发其初始化。

  3. 初始化一个类,如果其父类还未初始化,则先触发该父类的初始化。

  4. 当虚拟机启动时,用户需要定义一个要执行的主类 (包含 main 方法的那个类),虚拟机会先初始化这个类。

  5. 当使用 jdk1.7 的动态动态语言时,如果一个 MethodHandle 实例的最后解析结构为 REF_getStatic、REF_putStatic、REF_invokeStatic、的方法句柄,并且这个句柄没有初始化,则需要先触发器初始化。

以上是“JVM类加载过程是怎样的”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: JVM类加载过程是怎样的

本文链接: https://www.lsjlt.com/news/230148.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JVM类加载过程是怎样的
    小编给大家分享一下JVM类加载过程是怎样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!类加载过程Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机...
    99+
    2023-06-02
  • Java类的加载过程是怎样的
    这篇文章主要讲解了“Java类的加载过程是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java类的加载过程是怎样的”吧!  一、加载  在加载阶段,虚拟机主要完成三件事:  1.通过...
    99+
    2023-06-02
  • JVM的类加载过程有哪些
    这篇文章给大家介绍JVM的类加载过程有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、基础知识我们平时写的Java写代码一般都是.java文件,编译成为.class字节码文件,然后类加载器把.class文件加载到...
    99+
    2023-06-15
  • JVM的类加载过程详细说明
    目录一、基础知识二、加载三、验证四、准备五、解析六、核心阶段:初始化七、双亲委派机制八、总结一、基础知识 我们平时写的Java写代码一般都是.java文件,编译成为.class字节码...
    99+
    2024-04-02
  • jvm中类加载过程的示例分析
    这篇文章主要介绍jvm中类加载过程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!类加载过程:1、加载阶段;2、验证阶段;3、准备阶段,主要是将类变量在方法区进行内存分配并进行初始化;4、解析阶段;5、初始化...
    99+
    2023-06-20
  • JVM类加载机制过程以及原理是什么
    这篇文章主要介绍“JVM类加载机制过程以及原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JVM类加载机制过程以及原理是什么”文章能帮助大家解决问题。一、做一个小测试通过注释,标注出下面两个...
    99+
    2023-07-05
  • jvm类加载器,类加载机制是什么
    这篇文章主要介绍“jvm类加载器,类加载机制是什么”,在日常操作中,相信很多人在jvm类加载器,类加载机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jvm类加载器,类加载机制是什么”的疑惑有所帮助!...
    99+
    2023-06-16
  • Final关键字对JVM类加载器的影响是怎样的
    这篇文章将为大家详细讲解有关Final关键字对JVM类加载器的影响是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。当一个类中有声明为static final的变量,这样的变量对类的加载...
    99+
    2023-06-17
  • 什么是JVM的类加载器
    本篇内容主要讲解“什么是JVM的类加载器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是JVM的类加载器”吧!1. 什么是JVM既然是学习关于JVM的相关理论知识,我们当然得知道什么是JVM...
    99+
    2023-06-16
  • JVM中Class文件的加载过程
    这篇文章主要讲解了“JVM中Class文件的加载过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM中Class文件的加载过程”吧!Class文件加载过程JVM加载Class文件主要分3...
    99+
    2023-06-16
  • Spring IOC容器的加载过程是怎样的
    本篇内容介绍了“Spring IOC容器的加载过程是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!spring ioc 容器的加载流程...
    99+
    2023-06-02
  • JAVA类的加载过程是什么
    JAVA类的加载过程主要分为加载、链接和初始化三个阶段。 加载:类加载是指将类的.class文件从文件系统或网络加载到内存中,并...
    99+
    2023-10-26
    JAVA
  • Java IDE 在 Linux 上的加载过程是怎样的?
    Java IDE 是 Java 集成开发环境的缩写,主要用于开发和调试 Java 应用程序。在 Linux 上使用 Java IDE,需要了解其加载过程。 Java IDE 的加载过程分为以下三个步骤: 安装 JDK 在 Linux ...
    99+
    2023-09-09
    ide load linux
  • spring类加载过程是什么
    Spring框架的类加载过程主要分为以下几步: 扫描配置文件:Spring框架通过配置文件来定义和管理Bean,在启动时会扫描配...
    99+
    2024-02-29
    spring
  • java类的加载的过程是什么
    Java类的加载过程包括以下步骤: 加载(Loading):将类的字节码文件加载到内存中。这个阶段由类加载器完成,类加载器将字节...
    99+
    2023-10-28
    java
  • jvm中怎么加载一个类
    这篇文章将为大家详细讲解有关jvm中怎么加载一个类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  第一步:加载,双亲委派:启动类加载器(jre/lib),系统扩展类加载器(ext/lib)...
    99+
    2023-06-02
  • Kubernetes中Nginx配置热加载的过程是怎样的
    Kubernetes中Nginx配置热加载的过程是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言Nginx本身是支持热更新的,通过nginx -s r...
    99+
    2023-06-26
  • jvm类加载机制怎么实现
    JVM类加载机制是通过类加载器来实现的。类加载器负责在JVM运行时将字节码文件加载到内存中,并将其转换为可执行的类。类加载器主要分为...
    99+
    2024-04-02
  • Java类被加载过程
    本篇内容主要讲解“Java类被加载过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java类被加载过程”吧!static修饰符表示静态的,在类加载时Jvm会把它放到方法区,被本类以及本类的所有...
    99+
    2023-06-05
  • JVM入门之类加载与字节码技术(类加载与类的加载器)
    目录1. 类加载阶段1.1 加载阶段1.2 链接阶段准备1.3 初始化阶段1.4 练习2. 类加载器2.1 启动类加载器2.2 扩展类加载器2.3 双亲委派模式2.4 线程上下文类加...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作