妙啊,一文解析虚拟机系列 | JVM类加载机制

JVM(六):虚拟机类加载机制 在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程) 阅读详情

妙啊,一文解析虚拟机系列 | JVM类加载机制

 

一、类加载简介

类的加载机制是指把编译后的.class类文件的二进制数据读取到内存中,并为之创建一个java.lang.Class对象,用来封装类在元数据空间的数据结构。

妙啊,一文解析虚拟机系列 | JVM类加载机制

 

类在JVM中的生命周期为:加载,连接,初始化,使用,卸载。不过这里只重点描述加载,连接,初始化这三个过程。

二、加载过程

基于一张图看懂加载子系统的细节流程:

妙啊,一文解析虚拟机系列 | JVM类加载机制

 

1、加载阶段

过程描述

加载阶段需要完成以下三个过程:

  • 通过类的全限定名来获取其定义的二进制字节流;
  • 将字节流所代表的静态存储结构转化为云数据空间的运行时数据结构;
  • 在堆Heap中生成一个代表这个类的java.lang.Class对象,作为对元数据空间中这些数据的访问入口;

类加载器

  • 引导类加载器

Bootstrap-ClassLoader基于C/C++实现,负责加载Java的核心类库JAVA_HOME\jre\lib\rt.jar,该加载器不继承自ClassLoader抽象类,并且只加载包名为java、javax、sun等开头类,一次保证对核心源码的保护。

  • 扩展类加载器

Extension-ClassLoader,基于Java语言,由sun.misc.Launcher$ExtClassLoader实现,派生于ClassLoader抽象类,从java.ext.dirs系统变量指定的路径中的加载类库,或者JDK安装目录jre\lib\ext目录下加载。

  • 系统类加载器

Application-ClassLoader,基于Java语言,由sun.misc.Launcher$ExtClassLoader实现,它负责加载环境变量ClassPath指定的类库,如果在应用程序中没有自定义类加载器,一般情况下作为程序中默认的类加载器。

2、连接阶段

验证

目的在于确保Class文件的字节流中包含的信息符合当前虚拟机的要求,保证加载类的正确性,不会危害虚拟机自身的安全,主要包括四种检验动作:

  • 文件格式验证:验证字节流是否符合Class文件格式的规范;
  • 元数据验证:确保其描述的信息符合Java语言规范的要求;
  • 字节码验证:确定程序语义是符合逻辑的;
  • 符号引用验证:确保解析动作能正确执行。

准备

为类的静态变量分配内存,并初始化为默认值,这时候进行内存分配的仅包括类变量(static)修饰,不包括(final-static)修饰的,这里也不会为实例变量分配初始化,实例变量会随着对象一块分配到Java堆中。

解析

将常量池中的符号引用转换为直接引用的过程,直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。解析主要针对类或接口、字段、类方法、接口方法、方法类型等,解析的动作实际是会随着JVM在执行完初始化之后再执行的。

3、初始化阶段

执行类构造器clinit ()方法的过程,该方法不需要自定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来,Jvm要保证clinit ()方法在多线程访问下的安全性。

三、机制策略

1、双亲委派模式

妙啊,一文解析虚拟机系列 | JVM类加载机制

 

类加载器收到了类加载的请求时,不会自己先去尝试加载这个类,而是把请求委托给父加载器去执行;

如果父加载器还存在父类加载器,则依次向上委托,因此类加载请求最终都应该被传递到顶层的启动类加载器中;

如果父类加载器可以完成类加载请求,就直接成功返回,只有当父加载器在无法完成该加载,子加载器才会尝试自己去加载该类;

2、沙箱安全机制

假设自定义一个类名为String且所在包为java.lang,在使用引导类加载器加载时会先加载JDK中的String类,因为这个类本来是属于jdk的,后面再次出现String类就会报错,以此保证源代码不被恶意篡改,这就是沙箱安全机制。

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent
【智能车Code review】——环岛的判定与补线操作 【1】效果展示图 状态1、状态2 状态3 状态4、状态5 状态6 状态7 状态8 【2】状态机设定需要的参数 以右环岛为例: k_left:左线的斜率 rou_of_left:左线的方差 last_rou_of_left:上一帧的左线方差 l_start:左线第一行为黑的所在行 right_turn_down; right_turn_middle; right_turn_up; 左线的下、中、上拐点 fiv_width[i]:第i行的赛道宽度 leftline_du 阅读详情

相关推荐

智能客服系统知识库构建:长尾问题解决方案全解析

智能客服系统知识库构建:长尾问题解决方案全解析

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 4112

类加载常见错误总结,写得非常好!

最近在做类隔离相关的一些工作,而恰恰之前协助开发同学时也发现会遇到许多类加载相关的异常,并且往往比较难定位与解决。这里简单做一个小总结。 类加载 首先我们来捋一捋类加载的基础知识。 图片以上是大家比较熟悉的类加载器模型,主要包含 3 种类加载器: BootstrapClassloader 根加载器,也就是系统类加载器,加载核心库,如 rt.jar。 ExtensionClassloader 扩展类加载器,主要加载/ext/下面的 jar 包 AppClassloader 离我们最近的类加载器,负责加载

欢迎关注公众号:【码农突围】,公号后台回复9999,可以获取一份500页的LeetCode刷题笔记。 554

【学习笔记】人群归因分数 PAF 以及combined PAF(更新)

在此推荐2篇发表在lancet以及jama子刊上的paf文章,这两篇文章套路是一样的,只是在不同国家进行。希望对大家学习PAF有所帮助,后面有新内容也会继续分享,也欢迎大家分享使用R语言计算PAF的经验~~~的时候,先建立了相关矩阵,再做主成分分析,得到communality。详细信息大家可翻阅原文。

weixin_53499537的博客 1497

虚拟机系列 | JVM类加载机制

类的加载机制是指把编译后的.class类文件的二进制数据读取到内存中,并为之创建一个java.lang.Class对象,用来封装类在元数据空间的数据结构。类在JVM中的生命周期为加载,连接,初始化,使用,卸载。不过这里只重点描述加载,连接,初始化这三个过程。...

【积累】,是一个长期持续的过程。 337

可微编程:当深度学习遇见物理定律,重塑科学计算新范式

本文探讨了可微编程如何将深度学习与物理定律相结合,重塑科学计算范式。通过自动微分技术,它将物理方程融入可微计算图,使模型在数据驱动的同时遵守物理约束。文章以神经常微分方程为例,阐述了其在连续系统建模、科学模拟器优化等领域的应用,并分析了当前面临的挑战与最佳实践路径。

weixin_29056145的博客 134

手把手教你用scATAC-seq分析拟南芥根尖染色质可及性(附代码实战)

本文详细介绍了使用scATAC-seq技术分析拟南芥根尖染色质可及性的完整流程,涵盖从实验设计、数据质控、细胞分群到差异分析和多组学整合的实战步骤。通过具体的代码示例,帮助植物研究者掌握单细胞表观组学分析的核心方法,揭示细胞异质性和基因调控动态。

weixin_29291185的博客 265

Java类加载机制学习笔记

文章目录Java类加载类的加载时机会触发类初始化的场景类加载的过程1.加载2.验证3.准备4.解析5.初始化类加载器双亲委派模型 Java类加载 ​ Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 ​ 类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。 类的加载时机 ​ 一个类型从被加

hualuolll的博客 373

Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(十九):微服务实战——Boot 4 + Spring Cloud 2026.x,构建高并发电商分布式系统

Component@Slf4j@Autowired// 白名单路径@Override// 白名单放行// 提取Token// 传递用户信息到下游服务.mutate().build();@Override// 最高优先级if (bearer!@Component技术点Boot 3 时代Boot 4 时代提升线程模型平台线程池(200线程上限)虚拟线程(百万级并发)50x+服务通信。

qq_17204557的博客 185

NVIDIA GeForce Experience登录报错:验证程序加载失败,请检查您的浏览器设置,例如广告拦截程序(解决办法)

NVIDIA GeForce Experience登录报错:验证程序加载失败,请检查您的浏览器设置,例如广告拦截程序(解决办法)

shine_Lee_的博客 8万+

〔重庆理工大学〕大学物理实验--液体表面张力系数的测定

每个老师要求不同,实验报告内容和数据仅供参考。

Pretty Boy Fox的博客 2802

基于Gurobi的综合能源系统运行优化:鲁棒两阶段优化方法

本文提出了一种基于Gurobi的综合能源系统鲁棒两阶段优化方法,针对包含换电站、光伏发电和电池储能的系统运行问题。研究采用多面体不确定性集合描述光伏出力随机性,构建了考虑电池衰减成本和弃光惩罚的两阶段优化模型:第一阶段制定日前调度计划,第二阶段处理实时运行中的不确定性。通过列与约束生成算法求解模型,并使用Python和Gurobi实现。仿真验证了该方法能有效平衡系统经济性与鲁棒性,为含高比例可再生能源的综合能源系统运行提供了实用解决方案。

huanghm88的专栏 242

nvidia验证程序加载失败,请检查您的浏览器设置,例如广告拾取程序。

Nvidia 验证程序加载失败,建议您检查浏览器设置,特别是广告拦截程序,因为它有时可能会阻止程序的加载。如果问题仍然存在,建议您尝试在不同的浏览器或计算机上进行测试,或者联系 Nvidia 技术支持以获取帮助。 ...

weixin_42601702的博客 4654

踩坑2周总结:Python+YOLO26搭建工业级多路视频分析应用,从单路卡顿到16路4K稳跑30FPS

本文分享了工业级多路视频分析系统的实战经验,针对智慧物流园区的车辆违停和人员安全监测需求,提出了一套完整的解决方案。作者通过踩坑实践,总结出多路视频分析的四大核心痛点:视频流解码瓶颈、推理调度混乱、内存占用爆炸和部署兼容性差。 文章详细介绍了技术选型方案,推荐使用FFmpeg+PyAV进行硬件加速解码、YOLO26+TensorRT INT8量化推理、单进程多线程的生产者-消费者架构,以及内存池复用等技术组合。该方案在RTX 4070 Ti上实现了16路4K视频30FPS稳定运行,GPU利用率达85%以上,

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 955

JVM——虚拟机的类加载机制

java.lang.ClassLoader中添加一个新的 protected方法findClass(),引导用户编写的类加载逻辑时尽可能去重写这个方法,如果父类加载失败,会自动调用自己的findClass()方法来完成加载,而不是在 loadClass()中编写代码,避免loadClass()被子类覆盖。如果数组的组件类型(Component Type,指的是数组去掉一个维度的类型)是引用类型,那就递归采用本节中定义的加载过程去加载这个组件类型,数组C将被标识在加载该组件类型的类加载器的类名称空间。

weixin_45021712的博客 1909

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深入JVM类加载机制

类加载的流程以及双亲委派模型

Floating Cat 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

一文读懂JVM类加载机制过程及原理万字详解

一文读懂Java虚拟机—类加载机制过程及原理万字详解

大数据开发、JAVA开发、人工智能AI 4922

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JVM系列--虚拟机类加载机制

在准备阶段,变量已经赋过一次系统要求的初始值,而在初始化阶段,则是根据程序员通过程序制定的主观计划去初始化类变量和其他资源。

qq_32473523的博客 1360

JVM类加载机制深度解析

在深入探讨Java虚拟机(JVM)的运行机制之前,我们首先需要了解JVM的核心知识点之一——加载过程。想象一下,一个复杂的Java应用程序启动时,JVM如何将代码从磁盘上的文件转换成可以在内存中运行的字节码。这个过程看似简单,实则涉及了JVM的多个组件和复杂的逻辑。在当今的软件开发中,内存管理是确保应用程序稳定性和性能的关键。然而,许多开发者往往忽视了JVM的加载过程,这可能导致对JVM内部工作原理的理解不足。

我是Java程序员廖志伟,感谢朋友们的支持! 1126

JVM-虚拟机类加载机制

以一组符号来描述所引用的目标;符号引用可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可,符号引用和虚拟机无关;在编译的时候每个java类都会被编译成一个class文件,但。

qq_74763440的博客 918

JVM篇·关于虚拟机类加载的机制整理

虚拟机类加载机制 本文为《深入理解Java虚拟机_第三版 周志明》学习笔记 文章目录虚拟机类加载机制类加载时机触发初始化阶段的6种情况:被动引用接口的初始化类加载过程加载验证文件格式验证元数据验证字节码验证符号引用验证准备解析类或接口的解析字段解析方法解析接口方法解析初始化类加载器双亲委派模型启动类加载器扩展类加载器应用程序类加载器 类加载机制:JVM把描述类的数据从Class文件加载到内存并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 类加载时机 生命周期7阶段:加载

qq_37419449的博客 7033

深入解析JVM类加载机制

JVM类加载机制是Java实现跨平台和动态性的核心基础,主要包括加载、链接和初始化三个阶段。加载阶段通过类加载器将类字节码转换为方法区的运行时数据,并生成Class对象;链接阶段验证类安全性,分配静态变量内存并解析符号引用;初始化阶段执行静态代码块和变量赋值。关键机制是双亲委派模型,通过层次化类加载器(启动类、扩展类和应用类加载器)确保类只加载一次,防止核心API被篡改。该模型优先委派父加载器处理请求,保障了Java程序的安全性和稳定性。

2301_80215285的博客 1212

【JVM】——JVM运行机制、类加载机制、内存划分

JVM运行机制,堆栈,程序计数器,元数据区,JVM加载机制,双亲委派模型

阿华的博客 1300

深入浅出JVM(三)之HotSpot虚拟机类加载机制

深入探讨了 HotSpot 虚拟机的类加载机制,包括类的生命周期(加载、验证、准备、解析、初始化、使用、卸载)及各阶段的具体内容。如加载阶段的作用,验证阶段的多种验证类型,准备阶段的内存分配与默认初始化,解析阶段的符号引用与直接引用转换,初始化阶段的类构造器执行等,还介绍了类卸载的条件。

mifffy_java的博客 1473

【Java虚拟机系列】- Java虚拟机类加载机制

类加载器Class Loader:实现类的加载动作,该部分代码实现通过一个类的全限定名来获取描述该类的二进制字节流,在Java虚拟机外部实现任一类都必须由加载它的类加载器和该类自身一起确定其在JVM中的唯一性,比较两个类是否相等只有在它们都由同一类加载器加载的前提下才有意义;否则,即使这两个类来源于同一个Class文件,被同一个Java虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等模块化的关键目标——可配置的封装隔离机制模块将代码分解为更小、更独立的部分。

m0_68383079的博客 1112

JVM 类加载机制解析

场景:需要从非标准来源加载类(如加密文件、网络传输、数据库)。实现步骤继承类;重写方法(推荐)或方法(不推荐,可能破坏双亲委派模型);在findClass中通过将字节流转换为Class对象。示例代码@Overridetry {JVM 类加载机制是 Java 跨平台和动态性的基石,其核心流程(加载→验证→准备→解析→初始化)和双亲委派模型确保了类加载的安全性和唯一性。理解类加载机制有助于解决类冲突、自定义类加载等实际问题,也是深入理解 Java 虚拟机的关键一步。

hqxstudying的博客 1228

JVM类加载机制解析

场景问题:在一个大型分布式系统中,每当启动一个新的服务实例时,系统管理员都会发现服务启动时间较长,且启动过程中资源消耗较大。经过分析,发现这是由于系统中的类加载机制不够高效,导致大量的类需要被重复加载,从而增加了启动时间和资源消耗。为了解决这个问题,我们需要深入了解JVM的类加载机制。知识点重要性:介绍JVM核心知识点之加载:概述的重要性在于,它是理解JVM运行时行为的基础。类加载是JVM执行Java程序的第一步,它决定了哪些类会被加载到JVM中,以及如何加载这些类。

MoneyHacksPro的博客 1111
上一篇: 阿里P8架构师熬夜三天,才硬肝出这份金九银十Java程序员跳槽涨薪必备秘籍!
下一篇: 双非本科毕业的我,为何能在金九银十期间斩获京东、字节、快手的offer
Java奥利给
博客等级 码龄6年 150粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值