广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JVM的类加载过程详细说明
  • 738
分享到

JVM的类加载过程详细说明

2024-04-02 19:04:59 738人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、基础知识二、加载三、验证四、准备五、解析六、核心阶段:初始化七、双亲委派机制八、总结一、基础知识 我们平时写的Java写代码一般都是.java文件,编译成为.class字节码

一、基础知识

我们平时写的Java写代码一般都是.java文件,编译成为.class字节码文件,然后类加载器把.class文件加载到JVM内存中,接下来JVM就执行我们的字节码文件,整个过程就是这样。

画个图方便大家好理解:

在这里插入图片描述

类加载过程其实非常琐碎且复杂,但是我们只要把握其中的核心工作原理即可

一个类从加载到使用会经历以下步骤:

加载-〉验证-〉准备-〉解析-〉初始化-〉使用-〉卸载

以以下ClassLoadDemo类代码举例:



public class ClassLoadDemo {

    private static int count = 666;

    public static void main(String[] args) {
        ReplicaManager replicaManager = new ReplicaManager();
    }
}

二、加载

那么什么时候会加载一个类呢?答案很简单,当你使用到这个类的时候JVM就会去加载。示例代码main函数是入口,会加载ClassLoadDemo.class字节码,又因为main函数使用了ReplicaManager.class,所以继续加载。

在这里插入图片描述

三、验证

验证这一步,是根据JVM规范,来校验你加载进来的.class文件的内容是否符合规范。当你的.class文件被人恶意修改了,字节码不符合JVM规范,那么JVM是没法执行这个字节码的。所以.class被加载到内存中需要验证,通过了之后才能交给JVM来运行

四、准备

准备这一步,就是给你的class中的类分配一定的内存空间,比如ClassLoadDemo类,就会给它分配内存空间,然后给它里面的static变量分配内存空间,给一个默认的初始值。

PS:int的默认值为0,boolean的默认值是false,引用类型的默认值为null,以此类推。

五、解析

解析这一步,实际上就是把符号引用替换为直接引用的过程。这一部分涉及JVM底层,有点复杂,所以不再深究。

以上三步,就核心就是“准备阶段”。因为这个阶段是给加载进来的类分配好了内存空间,类变量也分配了内存空间,并且给了默认的初始值,这个概念,大家心里一定要有。

六、核心阶段:初始化

上面讲过准备阶段会给类变量分配一个内存空间,然后给初始值。但是赋值这一段逻辑在哪里执行呢?答案就是在初始化阶段。

以上的示例代码ClassLoadDemo.class的count变量在准备阶段就是给一个默认值0,但是到了初始化就会赋值为666。

知道了类的加载过程,那么什么时候初始化一个类呢?这里有一个非常重要的规则,就是如果初始化一个类,发现他的父类还没初始化,那么必须先初始化他的父类。

到这里大家应该对类加载的整个过程都有一定的了解,我再根据以上内容画一个张图方便理解。

在这里插入图片描述

现在相信大家已经搞明白了整个类加载从触发时机到初始化的过程了,那么还有一个重要的知识点是类加载器,接着分享。

类加载器

JVM的类加载器主要有四种,Bootstrap ClassLoader、Extension ClassLoader、Application ClassLoader,还有一个是自定义类加载器。接下来我来介绍一下他们。

启动类加载器

Bootstrap ClassLoader主要负责加载我们在电脑上安装的Java目录下的核心类。比如我们安装的jdk下就有一个lib目录,里面放着Java最核心的类,支持着Java系统的运行。

扩展类加载器

Extension ClassLoader也是类似的,在我们安装的JDK中有一个lib/ext目录,这里面有一些类就是需要使用这个类加载器加载,支持你的Java系统运行。

应用程序类加载器

Application ClassLoader负责去加载ClassPath环境变量所指定的类,其实可以大概理解为加载你写好的Java代码,然后这个类加载器帮我们把写好的代码加载到内存中运行。

自定义类加载器

除了以上的三种类加载器,我们还可以自定义类加载器,根据自己的需求加载类。

七、双亲委派机制

JVM的类加载器是有亲子层级结构,启动类加载器是处于最上层的,扩展类加载器在第二层,第三层是应用程序类加载器,最后一层是自定义加载器。

在这里插入图片描述

双亲委派机制说的是,假设你的应用程序需要加载一个类,它会首先委派给自己的父类加载器去加载,最后到Bootstrap ClassLoader加载器。

如果最上层的类加载器加载不了,他就会下推权利给下面的类加载去加载,一层层下来。

八、总结

今天分享了类加载过程还有类加载器的相关知识,主要以我的学习理解还有图来更加直观的理解这个知识点。

希望以上的内容对你们有所帮助。

到此这篇关于JVM的类加载过程详细说明的文章就介绍到这了,更多相关JVM类加载内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JVM的类加载过程详细说明

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

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

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

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

下载Word文档
猜你喜欢
  • JVM的类加载过程详细说明
    目录一、基础知识二、加载三、验证四、准备五、解析六、核心阶段:初始化七、双亲委派机制八、总结一、基础知识 我们平时写的Java写代码一般都是.java文件,编译成为.class字节码...
    99+
    2022-11-12
  • 详细分析JVM类加载机制
    目录前言1. jvm 的组成2. 类加载1. 加载  2. 链接3. 初始化3. 类加载器引导类加载器(启动类加载器)扩展类加载器应用程序类加载器4. 双亲委派机...
    99+
    2022-11-13
  • Java类加载过程与类加载器详细介绍
    目录1. 类加载过程加载链接初始化2. 类加载器启动类加载器扩展类加载器应用类加载器自定义类加载器双亲委派模型1. 类加载过程 加载 通过类的全限定名(包名 + 类名),获取到类的...
    99+
    2022-11-13
    Java 类加载过程 Java加载器
  • JVM的类加载过程有哪些
    这篇文章给大家介绍JVM的类加载过程有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、基础知识我们平时写的Java写代码一般都是.java文件,编译成为.class字节码文件,然后类加载器把.class文件加载到...
    99+
    2023-06-15
  • JVM类加载过程是怎样的
    小编给大家分享一下JVM类加载过程是怎样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!类加载过程Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机...
    99+
    2023-06-02
  • C++类与对象的详细说明
    目录类的引入类的定义1、声明和定义全部放在类体中2、声明放在头文件,定义放在源文件中类的访问限定符号及封装访问限定符封装类的实例化类对象模型this指针this指针的特性总结类的引入...
    99+
    2022-11-13
  • jvm中类加载过程的示例分析
    这篇文章主要介绍jvm中类加载过程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!类加载过程:1、加载阶段;2、验证阶段;3、准备阶段,主要是将类变量在方法区进行内存分配并进行初始化;4、解析阶段;5、初始化...
    99+
    2023-06-20
  • C++类与对象的详细说明2
    目录类的默认成员函数构造函数概念特性析构函数概念特性拷贝构造函数概念特征赋值运算符重载运算符重载赋值运算符重载取地址及const取地址操作符重载总结类的默认成员函数 每个类中,如果不...
    99+
    2022-11-13
  • JVM类加载机制及生命周期的详细介绍
    这篇文章主要讲解了“JVM类加载机制及生命周期的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM类加载机制及生命周期的详细介绍”吧!一.目标:什么是类的加载?类的生命周期?类加载...
    99+
    2023-06-02
  • Java类加载的过程详解
    目录Java:类加载过程1.加载——3件事2.连接2.1.验证2.2.准备2.3.解析3.初始化总结Java:类加载过程 1.加载——3件事 1.通过全类名获取定义此类的...
    99+
    2022-11-12
  • JAVA虚拟机(JVM)详细介绍(五)——类加载机制
    上篇中我们讲解了Class文件,这篇我们说说虚拟机是如何加载这些Class文件的?Class文件中的信息进入到虚拟机后会发生什么变化?这就涉及到了类加载机制。类加载机制是把类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始...
    99+
    2015-12-28
    java教程 JVM
  • JVM中Class文件的加载过程
    这篇文章主要讲解了“JVM中Class文件的加载过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM中Class文件的加载过程”吧!Class文件加载过程JVM加载Class文件主要分3...
    99+
    2023-06-16
  • Go基础教程系列之数据类型详细说明
    每一个变量都有数据类型,Go中的数据类型有: 简单数据类型:int、float、complex、bool和string数据结构或组合(composite):struct、array、...
    99+
    2022-11-13
  • JVM类加载器之ClassLoader的使用详解
    目录类加载器概述加载器的种类验证不同加载器核心方法JVM类加载机制的三种方式全盘负责父类委托、双亲委派缓存机制打破双亲委派重写loadclass方法自定义类加载器准备字节码文件创建自...
    99+
    2022-11-13
    JVM类加载器ClassLoader JVM类加载器 类加载器ClassLoader
  • JVM类加载机制过程以及原理是什么
    这篇文章主要介绍“JVM类加载机制过程以及原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JVM类加载机制过程以及原理是什么”文章能帮助大家解决问题。一、做一个小测试通过注释,标注出下面两个...
    99+
    2023-07-05
  • Java中类的加载器及其加载过程
    目录Java中类的加载器及其加载过程概述过程一:Loading过程二:Linking过程三:InitializationJava中类的加载器及其加载过程 概述 字节码文件在类加载器子...
    99+
    2023-05-16
    Java类的加载器 Java类加载过程 加载器加载过程
  • 一篇文章弄懂JVM类加载机制过程以及原理
    目录一、做一个小测试二、类的初始化步骤:三、看看你写对了没?四、类的加载过程五、类加载器的分类1、启动类加载器(引导类加载器)2、扩展类加载器3、应用程序类加载器(系统类加载器)六、...
    99+
    2023-02-07
    jvm加载类的过程和机制 jvm加载类原理机制 java类加载原理
  • 面试必时必问的JVM 类加载机制详解
    目录前言正文1、类加载的过程。1)加载2)验证3)准备4)解析5)初始化2、Java 虚拟机中有哪些类加载器?1)启动类加载器(Bootstrap ClassLoader):2)扩展...
    99+
    2022-11-12
  • SecureCRT的下载、安装详细过程
    目录简单介绍下SecureCRT一、SecureCRT的下载二、SecureCRT的安装三、SecureCRT的使用简单介绍下SecureCRT SecureCRT是一款支持SSH(...
    99+
    2022-11-12
  • java虚拟机原理:类加载过程详解
    目录一、Java 类加载过程1、字节码编译2、加载3、连接4、初始化总结一、Java 类加载过程 1、字节码编译 编写好 Java 源码 Student.java , 使用 ja...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作