Java类加载机制

类加载机制

将class文件中的二进制数据读取到内存中,并对其进行校验,解析和初始化,将类型数据存放在方法区,实例对象存放在堆,作为方法区该类的数据访问接口。这就是类加载。
类的生命周期

加载

  1. 通过全限定名获取二进制字节流
  2. 将字节流代表的静态存储结构转化为方法区的运行时数据结构
  3. 在堆中生成一个代表该类的Class对象,作为方法区该类的数据访问接口

加载

连接

验证、准备、解析统称为连接

验证

img

  1. 文件格式验证:第一阶段要验证字节流是否符合Class文件格式的规范,并且能被当前版本的虚拟机处理。
  2. 元数据验证:第二阶段是对字节码描述的信息进行语义分析,以保证其描述的信息符合《Java语言规范》的要求。
  3. 字节码验证:第三阶段是通过数据流分析和控制流分析,确定程序语义是合法的、符合逻辑的。
  4. 符号引用验证:符号引用验证可以看作是对类自身以外(常量池中的各种符号引用)的各类信息进行匹配性校验,通俗来说就是,该类是否缺少或者被禁止访问它依赖的某些外部类、方法、字段等资源。

准备

为类中定义的变量,(Static)分配内存并设置初始值

JDK7及以前,分配在方法区
JDK8及以后,随Class对象一起存放在Java堆中

解析

Java虚拟机将常量池内的符号引用替换为直接引用。

符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可。符号引用与虚拟机实现的内存布局无关,引用的目标并不一定是已经加载到虚拟机内存当中的内容。各种虚拟机实现的内存布局可以各不相同,但是它们能接受的符号引用必须都是一致的,因为符号引用的字面量形式明确定义在《Java虚拟机规范》的Class文件格式中。

直接引用(Direct References):直接引用是可以直接指向目标的指针、相对偏移量或者是一个能间接定位到目标的句柄。直接引用是和虚拟机实现的内存布局直接相关的,同一个符号引用在不同虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经在虚拟机的内存中存在。

初始化

类加载过程的最后一个步骤,在该阶段,Java虚拟机才真正开始执行类中编写的Java程序代码,将主导权移交给应用程序。

类加载器

用来实现通过类的全限定名获取类字节流数据的动作。
类加载器时独立于Java虚拟机的,允许程序员按自身需要自行实现类加载器。使得同一个类可以实现访问隔离、OSGi、程序热部署等等。

三层累加载器

启动类加载器(Bootstrap Class Loader):负责加载<JAVA_HOME>\lib 目录,或者被 -Xbootclasspath 参数制定的路径,例如 jre/lib/rt.jar 里所有的class文件。由C++实现,不是ClassLoader子类。

拓展类加载器(Extension Class Loader):负责加载Java平台中扩展功能的一些jar包,包括<JAVA_HOME>\lib\ext 目录中 或 java.ext.dirs 指定目录下的jar包。由Java代码实现。

应用程序类加载器(Application Class Loader):我们自己开发的应用程序,就是由它进行加载的,负责加载ClassPath路径下所有jar包。

双亲委派模型

类加载器在接到类的加载请求时,先加载父类(父类加载器),只有父类无法加载时,才尝试自己加载。

不同的类加载器加载同一个类,会出现存放不同的类的信息。
使用双亲委派模型,可以保证一个类只有一个类加载器。

载器加载同一个类,会出现存放不同的类的信息。
使用双亲委派模型,可以保证一个类只有一个类加载器。

如有疏错,恳请指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/121404.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Centos7安装宝塔面板8.0.3并实现公网远程登录宝塔面板【内网穿透】

Centos7安装宝塔面板8.0.3并实现公网远程登录宝塔面板【内网穿透】 文章目录 Centos7安装宝塔面板8.0.3并实现公网远程登录宝塔面板【内网穿透】一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&…

等保评测是什么意思

等保评测是一种信息安全评估标准&#xff0c;是国家信息安全管理机构为确保信息安全而对信息系统的安全性能进行定期评估的行为。它主要用于评估网络安全的实现情况&#xff0c;包括组织和技术。 等保评测具有系统性和综合性&#xff0c;能够及时发现网络安全风险&#xff0c;…

【 Docker: 数据卷挂载】

背景 Docker只提供了容器运行的必备依赖&#xff0c;但是一些编辑等操作的依赖是不支持的&#xff0c;如vi操作容器内部文件、将静态资源拷贝到容器内来等。 docker pull nginx docker run -d -p 81:80 --namemynginx -v D:/docker/nginx/www:/usr/share/nginx/www -v D:/dock…

【技术驿站】分布式基础与常见面试问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Vue多级路由的实现

对Vue路由的配置不了解的看这篇文章&#xff1a;Vue-router 路由的基本使用-CSDN博客 一、配置children属性 注意&#xff1a;子路径不能带 / { path : "/父路径", component : 父组件, children : [{ path : "子路径", component : 子组件 }] } 二、配…

Android中 Applicaton Context,Service context, Activity context 的区别。

Context类图 类间关系&#xff1a;https://weichao.blog.csdn.net/article/details/129969122 Context是一个抽象类&#xff0c;定义了接口&#xff0c;它的实现类是ContextImpl类。 ContextWrapper是Context的派生类&#xff0c;它实现了Context类的接口。但是ContextWrappe…

2023 electron最新最简版windows、mac打包、自动升级详解

这里我将讲解一下从0搭建一个electron最简版架子&#xff0c;以及如何实现打包自动化更新 之前我有写过两篇文章关于electron框架概述以及 常用api的使用&#xff0c;感兴趣的同学可以看看 Electron桌面应用开发 Electron桌面应用开发2 搭建electron 官方文档&#xff1a;ht…

Window下安装 Mongodb,并实现单点事务

在window操作系统下安装Mongodb&#xff0c;并让单点mongodb支持事务&#xff0c;mongodb5以上时才支持事务&#xff0c;所以必须时mongodb5及以上版本才支持。 1、下载mongodb安装文件 &#xff08;1&#xff09; 下载mongodb msi 安装文件 地址&#xff1a;mongocommunity &…

给简历镀金的超级大赛来了 学计算机的学生快冲

近日&#xff0c;由全国高等院校计算机基础教育研究会主办&#xff0c;传智教育院校邦承办的第六届“传智杯”全国IT技能大赛已正式发布。 截至目前&#xff0c;第六届“传智杯”全国大学生IT技能大赛报名人数已达 10741 人&#xff0c;覆盖全国 901 所高校&#xff0c;目前各大…

CS5523/CS5518/MIPI接口转接芯片方案/替代IT6151

CS5523MIPI转EDP信号转换芯片,可替代停产芯片IT6151, CS5518 MIPI转单/双通道 LVDS转接芯片方案。 CS5523芯片应用参考电路&#xff1a; CS5518芯片应用参考电路&#xff1a; CS5518特点&#xff1a; 内置晶振&#xff0c;无需外部晶体 可选外部时钟输入20-154MHz 支持SSC…

科技云报道:数智化升级,如何跨越数字世界与实体产业的鸿沟?

科技云报道原创。 数智化是当下商业环境下最大的确定性。 2022年&#xff0c;中国数字经济规模达50.2万亿元&#xff0c;占国内生产总值比重提升至41.5%&#xff0c;数字经济成为推动经济发展的重要引擎。从小型创业公司到跨国巨头&#xff0c;数字化转型在企业发展历程中彰显…

VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了

前言 Visual Studio Code 是一个轻量级功能强大的源代码编辑器&#xff0c;支持语法高亮、代码自动补全&#xff08;又称 IntelliSense&#xff09;、代码重构、查看定义功能&#xff0c;并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对…

安卓 车轮视图 WheelView kotlin

安卓 车轮视图 WheelView kotlin 前言一、代码解析1.初始化2.初始化数据3.onMeasure4.onDraw5.onTouchEvent6.其他 6.ItemObject二、完整代码总结 前言 有个需求涉及到类似这个视图&#xff0c;于是在网上找了个轮子&#xff0c;自己改吧改吧用&#xff0c;拿来主义当然后&…

flink1.18.0 sql-client报错

报错 Flink SQL> select * from t1; [ERROR] Could not execute SQL statement. Reason: org.apache.flink.table.api.ValidationException: Could not find any factory for identifier kafka that implements org.apache.flink.table.factories.DynamicTableFactory in t…

STM32_project:led_beep

代码&#xff1a; 主要部分&#xff1a; #include "stm32f10x.h" // Device header #include "delay.h"// 给蜂鸣器IO口输出低电平&#xff0c;响&#xff0c;高&#xff0c;不向。 //int main (void) //{ // // 开启时钟 // RC…

如何在Linux上搭建本地Docker Registry并实现远程连接

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…

【python算法】迪杰斯特拉算法 python实现

迪杰斯特拉算法 文章目录 迪杰斯特拉算法简介核心思想贪心算法的优缺点运行过程代码伪代码Python代码 简介 迪杰斯特拉算法的是用于图搜索的一种算法&#xff0c;其作用是图中搜索出单源最短路径。单源最短路径问题是一个给定起始点和目标点&#xff0c;在图中搜索出由起始点到…

4.Swin Transformer目标检测——训练数据集

1.centos7 安装显卡驱动、cuda、cudnn-CSDN博客 2.安装conda python库-CSDN博客 3.Cenots Swin-Transformer-Object-Detection环境配置-CSDN博客 步骤1&#xff1a;准备待训练的coco数据集 下载地址&#xff1a;https://download.csdn.net/download/malingyu/88519420 htt…

尼得科电机的强大性能,将列车门和屏蔽门的开合变得从容而安全

城市脉动&#xff0c;人流涌动。 无论城市轨道交通还是远途铁路运输&#xff0c; 尼得科电机的强大性能&#xff0c;将列车门和屏蔽门的开合变得从容而安全。 尼得科的电机方案&#xff0c;有助于列车门稳准开闭&#xff0c;保障乘客安全无忧。高效驱动&#xff0c;让乘客的行程…

Win10笔记本开热点后电脑断网的解决方法

在Win10笔记本电脑中用户可以随时打开热点&#xff0c;但是发现热点开启后电脑就会断网&#xff0c;网络不稳定就会影响到用户的正常使用。下面小编给大家介绍两种简单的解决方法&#xff0c;解决后用户在Win10笔记本电脑开热点就不会有断网的问题出现了。 具体解决方法如下&am…