【Java 虚拟机】类加载器

Java虚拟机(三)类加载器详细介绍 大家好,我是一个爱举铁的程序员Shr。 本篇文章将详细介绍类加载器,阅读完本篇文章你可能需要20分钟。 今天讲述的内容包括:类和类加载器之间的关系,类加载器的分类,类加载器的双亲委派模型。 一、什么是类加载器?类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为类加载器[1]。... 阅读详情


一、引言

我们编写好的Java程序都是由若干个class文件组织而成。当我们程序运行时,会调用该程序的一个入口函数来执行程序功能,而这些功能是封装在不同的class文件中的,所以就常常会从这个class文件调用另一个class文件中的方法。如果另外一个class文件不存在,就会引发系统异常。

程序在启动时,绝对不会加载程序需要的所有class文件,而是根据程序需要,通过Java的类加载机制来动态地加载某一个class文件到内存当中。

类加载器在Java中非常重要,下面从如下几个方面来进行讲解。

另外,关于Android的类加载机制,可以查看《【Android热修复与插件化 三】ClassLoader详解》。


二、什么是类加载器?

ClassLoader就是用来动态加载class文件到内存当中的。


三、类加载器的类型

1、从开发者角度划分:

(1)BootStrap ClassLoader

启动类的加载器,负责加载放在JDK中li目录下的文件。

(2)Extension ClassLoader

扩展类的加载器,负责加载JRE中ext目录下的文件。

(3)App ClassLoader

应用程序类加载器,负责加载用户路径下指定的类。

2、从虚拟机角度划分:

(1)启动类加载器(C++语言实现)

(2)所有其他类加载器(Java语言实现)


四、双亲委派模型

每一层类加载器上方的类加载器叫作父类加载器。它们之间的父子关系不是通过继承来实现的,而是使用组合关系来复用父类加载器中的代码。

当类加载器需要加载一个class文件时,首先先请求父类加载器去加载,只有当所有父类加载器没有找到对应的类时,才会自己去加载。

双亲委派模型对于保护Java程序的稳定性非常重要。


五、类加载过程(加载-->卸载)

1、静态绑定、动态绑定


2、第一步:加载

(1)通过一个类的全限定名来获取其定义的二进制字节流

(2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构

(3)在Java堆中生成一个代表这个类的lang.lang.Class对象,作为对方法区中的这些数据的访问入口

3、第二步:验证

为了确保class文件中的字节流包含的信息符合当前虚拟机的要求

4、第三步:准备

正式为类变量分配内存,并设置类变量初始化。

这些内存是在方法区中分配的。

(1)同时被static和final修饰的变量必须在声明的时候就赋值

(2)数组初始化时,默认值为null,其中元素也被相应赋上默认值

5、第四步:解析

6、第五步:初始化

执行类构造方法的过程(注意:成员变量初始化在准备阶段就完成了)


六、最后

以上就是我对Java类加载机制的总结,如有任何疑问可留言提问,博主每天都会查看。


【java虚拟机系列】JVM类加载器与ClassNotFoundException和NoClassDefFoundError 在我们日常的项目开发中,会经常碰到ClassNotFoundException和NoClassDefFoundError这两种异常,对于经验足够的工程师而言,可能很轻松的就可以解决,但是却不一定明白为何要去这么做,本博客将从java虚拟机类加载的角度让大家彻底理解ClassNotFoundException和NoClassDefFoundError这两种异常及一些重用的解决方案。 在博客 阅读详情

相关推荐

scratch航天梦主题课程作品分享,包含ppt、素材包

而今年多国都将发射探测器尝试登陆月球,2023年或将称为“登月年”,请大家发挥创新思维,以“星辰大海”为创作主题,搜集相关信息 、展开联想,为实现升空 、探测 、取样贡献创意!即使去淘宝买的素材,也要从百度网盘,但素材太多大了或者太多文件,也要充值百度网盘超级会员才能保存,提高下载速度。同学们大家好,今天我们就要开始航天主题-嫦娥五号探月工程系列的编程课程了,不仅可以学习到很多航天知识,了解本次嫦娥五号的发射历程,还能让我们用编程遨游太空呢。即使下载了,也要上传,不是特别方便,尤其是不好查找。

少儿编程吕口口 2483

【Java系列】Java虚拟机—类加载器介绍

Java类加载器是Java虚拟机的一个重要组成部分,它负责将编译后的Java类文件加载到内存中,并转换为可以被JVM执行的代码。Java类加载器按照加载类的位置和方式可以分为引导类加载器、扩展类加载器、系统类加载器和自定义类加载器。Java类加载器的工作原理是按照“双亲委派”模型来实现的。Java类加载器的性能优化可以从缓存机制、类的预加载和Class文件的优化等方面入手。

颜淡慕潇 3万+

双模音频解码器设计:USB+蓝牙LDAC平衡输出方案

音频解码器是数字音频系统中实现数模转换的核心组件,其性能直接决定音质保真度与系统延迟。基于高集成SoC的解码方案通过统一时钟域与片内DSP处理,有效抑制Jitter并简化硬件拓扑;结合全平衡模拟输出架构,可显著提升共模抑制比(CMRR)与信噪比(SNR)。该技术路径广泛应用于便携式Hi-Res音频设备、USB-C小尾巴DAC及蓝牙高解析耳机放大器等场景。本文围绕ES9038Q2M双模SoC展开,详解其在LDAC协议支持、UAC2.0兼容性及平衡电流型DAC输出方面的工程实现,为高性能、可量产音频硬件开发提供

weixin_42613018的博客 388

java虚拟机的类加载器

从java虚拟机的角度来讲,只存在两种不同类型的类加载器: 1)一种是启动类加载器,这个类加载器是C++语言实现的,是虚拟机自身的一部分; 2)另一种就是所有其他的类加载器,这些类加载器是由Java语言实现,独立于虚拟机外部,并且全部继承自抽象类java.lang.ClassLoader。 1,扩展类加载器,它负责加载\lib\ext目录中的,或者被java.ext.dirs系统变量所指定的

xuqiaobo的博客 302

别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化

本文详细解析了医学影像三维重建中常见的模糊问题,并手把手教你使用3DSlicer处理DICOM数据,实现精准的三维可视化。从层厚设置到数据格式转换,再到重建算法选择和渲染参数微调,提供了一套完整的优化方案,特别适合临床医生和医学影像处理人员提升工作效率。

weixin_28693447的博客 248

ArcGIS Pro2.5深度学习使用注意事项

ArcGIS Pro2.5深度学习使用中的注意事项1、ArcGIS Pro2.5深度学习使用中的注意事项1.1、Label深度学习样本工具参数介绍1.2、准备数据参数介绍1.3、训练模型介绍1.4、ArcGIS Pro2.5深度学习推理工具和模型对应关系介绍1.4.1、Classify Objects Using Deep Learning1.4.2、Classify Pixels Using D...

GIS哼哈哈的博客 7201

Java虚拟机类加载器

类加载器 虚拟机设计团队把类加载阶段中的获取二进制字节流这个动作放到Java虚拟机外部去实现,一遍让程序自己决定如何去获取所需要的类,实现这个动作的代码块被称为“类加载器”。 同一个Class文件如果被不同的类加载器所加载,那么加载出来的两个类是不相等的,所以某个Class文件只能由一个加载器加载。 这边的相等是Class兑现的equals()方法,isInstance()方法,isAssigna...

FJJJJJ 5034

Cilium动手实验室: 精通之旅---5.Mutual Authentication with Cilium

在Cilium 入门实验室中,您将在受《星球大战》启发的场景中实施高级第 3-7 层网络策略。在实验结束时,您将实施强大的网络策略,并通过微分段保护 Empire 免受来自叛乱的攻击。在本实验中,您将重新部署《星球大战》演示应用程序,但除了网络策略之外,您还将了解如何在工作负载之间实施相互身份验证。

Q先生 1398

Java虚拟机——类加载器

【代码】Java虚拟机——类加载器。

肇秋贰拾捌的博客 183

qt项目中添加 jsoncpp 库

qt使用jsoncpp库

deroy 1350

汽车电子零部件(14):TMS热管理系统

TMS(thermal management system)热管理系统,这是新能源汽车诞生后随之而产生的一种新汽车零部件,一旦热管理失控会触发自燃,这种现象也是对EV来说是件头疼的事。汽车的热管理系统(TMS)是一个关键部件,有助于调节汽车电池组、车厢和其他车辆系统的温度。TMS的主要目的是在驾驶过程中保持最佳的电池性能和乘客舒适度。TMS使用各种加热和冷却系统来调节电池组和车厢的温度,并通过优化其使用,降低能耗,提高车辆的整体效率。

码农17年的博客 3161

类加载器以及java虚拟机

1.虚拟机加载类的机制 虚拟机:执行class文件的,容器 概念:虚拟机将描述类的数据的class文件加载到内存,并将这些数据进行校验、转换、解析、初始化的过程,最终形成java虚拟机能使用的java类型的数据 什么时候加载类? 1.创建对象实例时 2.调用静态成员时(变量、方法) 3.创建子类对象 4.通过反射技术获取某个类型的Class对象时 当程序执行到某一行时,需要使用某个类,内存中没有这个类,需要加载这个类。 加载类的过程: 1。加载: 将class文件从硬盘中读取到内存中,并会为其创建一个Cla

qq_45072449的博客 261

实战篇| app爬虫不用真机

之前写过一篇基于真机app爬虫《App爬虫实战篇-以华为真机手机爬取集换社的app为例》,如果大家有用真机爬虫的经历,会深刻认识到真的不方便,一是自己的手机,经常会被电话、微信等打断,二是闲置手机,面对小批量数据还能勉强,大批量爬虫,会导致成本指数级上升,并且控制起来相对麻烦。以下就是常见的模拟器。emulator -avd my_avd -no-snapshot-save # 启动时不保存 snapshot。emulator -avd my_avd -wipe-data # 清除数据(恢复到出厂)

youbingchen的博客 597

深入java虚拟机——类加载器

    类加载器完全可以说是是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。     Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节码(.class 文件)。类加载器负责读取 Java 字节码,并转换成java.l...

冷眼 312

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java虚拟机中的类加载器

一、概述 JVM设计者把类加载阶段中的“通过'类全名'来获取定义此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。对于任何一个类,都需要由加载它的类加载器和这个类来确立其在JVM中的唯一性。也就是说,两个类来源于同一个Class文件,并且被同一个类加载器加载,这两个类才相等。 二、双亲委派模型 从

想作会飞的鱼的博客 826

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

类加载机制以及类加载器---Java虚拟机

本文生动详细的介绍JVM中类加载机制和类加载器以及双亲委派模型

阿伟のBlog 716

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java虚拟机中的类加载器的类型

所谓Java类加载器就是虚拟机用来将类加载在其内部的字节文件加载模块。Java虚拟机采用了父亲委托机制,这种机制能更好地保证Java平台的安全。在这种委托机制中,除了Java虚拟机自带的根类加载器以外,其余的类加载器都有且只有一个父加载器。加载器的加载逻辑是,加载器首先委托其父加载器去加载需要加载的类,若父加载器能够顺利加载此类,则加载工作全部交给父加载器完成,否则将由加载器自身去完成加载工作。 ...

iteye_16074的博客 138

Java虚拟机--类加载器

Java虚拟机–类加载器 如何加载一个Class文件 但是,关于类加载器的只是,并没有做任何介绍,只是说了下会在后面的文章中进行单独阐述。那么,本篇的意义就是来告诉大家类加载器的实现。 首先,我们来简单的回顾下类加载机制中的内容。 类加载机制 虚拟机把类的数据从.class文件加载到内存,并对class文件中的数据进行校验、转换、解析、初始化等操作后,最终形成可以被虚拟机识别并使用的Class对象...

木村的博客 270

深入理解Java虚拟机 - 类加载器

引子: 类加载器(classloader)是独立于虚拟机之外,可以独立实现的代码模块。 OSGi使用了类加载器的这一特点实现其热插拔的特性 Java同C++等语言不通,其连接操作不是在编译期间进行的,而是在程序运行期间进行的,这也就为java的动态扩展的语言特性提供了基础。 首先介绍下虚拟机的类加载机制: ...

a1752807634的博客 134

深入理解Java虚拟机(类加载器)

无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进行加载,因此Object类在程序的各种类加载器环境中都能够保证是同一个类。如果该类加载加载失败,则抛出异常转而让下一层加载器加载(越基础的类由越上层的加载器进行加载)),这样解决了基础类型的不一致问题。由自身缺陷导致,我们回想一下该模型的好处,无论哪一个类加载器要加载一个类,最终都是委派给处于模型最顶端的启动类加载器进行加载。它的查找顺序只有在开头符合双亲委派模型的原则,其余的类查找都是在平级的类加载器中进行。

月伴飞鱼 940

Java虚拟机学习 - 类加载器(ClassLoader)

类加载器 类加载器(ClassLoader)用来加载 class字节码到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源文件在经过 Javac之后就被转换成 Java 字节码文件(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每一个这样的实例用来表示一个 Java 类。实际的情况可

天行健,君子以自强不息 1万+

【JVM】Java虚拟机(三)——类加载与类加载器

Java类加载机制是JVM将.class文件加载到内存并转换为可用类型的过程,包括加载、验证、准备、解析和初始化五个阶段。类加载采用双亲委派模型,分为启动类加载器、扩展类加载器和应用类加载器。自定义类加载器可实现热部署、模块隔离等功能。类卸载需满足实例回收、Class对象无引用和ClassLoader回收三个条件。常见问题包括ClassNotFoundException和类加载器内存泄漏等,需注意类路径检查和生命周期管理。该机制保障了Java程序的安全性和灵活性。

gadiaola的博客 1881

java虚拟机classloader_Java虚拟机学习 - 类加载器(ClassLoader)

类加载器类加载器(ClassLoader)用来加载 class字节码到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源文件在经过 Javac之后就被转换成 Java 字节码文件(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每一个这样的实例用来表示一个 Java 类。实际的情况可能更加复...

weixin_39829574的博客 86

Java虚拟机:类加载器

类加载过程 类的加载指的时将类的.class文件的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后再内存中创建一个java.lang.Class对象,用来封装类在方法区的数据结构。 加载.class文件的方式: 从本地系统中直接加载 通过网络下载.class文件 从zip、jar等归档文件中加载.class文件 从专有数据库中提取.class文件 将java源文件动态编译为.clas...

大小鱼鱼鱼鱼鱼 301

Java虚拟机类加载器及双亲委派机制

所谓的类加载器(Class Loader)就是加载Java类到Java虚拟机中的,前面《面试官,不要再问我“Java虚拟机类加载机制”了》中已经介绍了具体加载class文件的机制。本篇文章我们重点介绍加载器和双亲委派机制。 类加载器 在JVM中有三类ClassLoader构成:启动类(或根类)加载器(Bootstrap ClassLoader)、扩展类加载器(ExtClassLoader)、应用类...

程序新视界 2215

java虚拟机classloader_Java虚拟机——类加载器深入剖析

一、java虚拟机与程序的生命周期在如下几种情况下,java虚拟机将结束生命周期:1、执行了System.exit()方法2、程序正常执行结束3、程序在执行过程中遇到了异常或错误而异常终止4、由于操作系统出现错误而导致java虚拟机进程终止二、类的加载、连接与初始化1、加载:查找并加载类的二进制数据2、连接a、验证:确认被加载的类的正确性b、准备:为类的静态变量分配内存,并将其初始化为默认值c、解...

weixin_28192383的博客 211
上一篇: 【Android 网络协议 四】DNS解析
下一篇: 【Java 虚拟机】堆/栈
Colin_Mindset
博客等级 码龄12年 159粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值