Java类的生命周期-连接阶段

news2024/11/28 18:42:14

Java类的生命周期-连接阶段


上篇讲述了类的加载阶段,通过类加载器读取字节码文件后在方法区与堆区生成对应的存放类信息的对象,本篇将讲解他的下一阶段-连接阶段

上篇说到类加载的五大阶段:

加载
连接
初始化
使用
卸载

连接阶段又可以分为三个子阶段:验证-准备-解析 ,我们逐一讲解

连接
验证
准备
解析

1.验证

验证阶段的主要目的是检测java字节码文件是否遵守了《Java虚拟机规范》,此过程一般不需要开发者参与
主要有:

  • 文件格式验证,文件开头是否为0XCAFEBABE,主次版本号是否满足当前Java虚拟机版本要求
  • 元信息验证,例如类必须要有父类
  • 验证程序执行指令的语义
  • 符号引用验证,是否访问了其他类中的private字段

以主次版本号的验证为例子,观察JDK8虚拟机的源码,其判断逻辑规则如下:

return (major >= JAVA_MAIN_SUPPORTED_VERSION) &&
	   (major <= max_version) &&
	   ((major != max_version) ||
	   (minor <= JAVA_MAIN_SUPPORTED_MINOR_VERSION));

major是主版本号,minor是副版本号,JAVA_MAIN_SUPPORTED_VERSION是最低支持的版本号,为45,即JDK1.0,max_version是最高版本号,即当前环境JDK版本号,如JDK8的52,所以字节码文件的主版本号要在45与当前版本号之间,JAVA_MAIN_SUPPORTED_MINOR_VERSION是支持最高副版本号,JDK未使用为0,所以当主版本号等于max_version时,副版本号不能大于0


2.准备

准备阶段是为静态字段分配内存并设置初始值
设置初始值并不是直接将其设置为代码中赋予的值,例如:

public class Demo{
	public static int i = 2;
}

在准备阶段呢,会为其开辟一份空间,并为其设置初始值为0,并不是2,而0就是默认值,赋值为2的操作会在下一阶段-初始化阶段执行,而每一种类型的静态字段都会在准备阶段赋予一个默认值:

数据类型初始值
int0
long0L
short0
char‘\u0000’
byte0
booleanfalse
double0.0
引用数据类型null

其目的是为了防止若代码中并未对其赋值,其内存中可能是之前残留的任意值

但是

如果静态字段的由final进行修饰,如:

public class Demo{
	public static final int i = 2;
}

在准备阶段就会赋值为2,final修饰的基本数据类型会在准备阶段就为其赋值为代码中的值


3.解析

解析阶段就较为简单,就是将常量池中的符号引用替换为直接引用即内存地址引用
在字节码文件中对于常量池中的引用是符号引用,通过符号即可找到其引用的值,但是运行时这种寻找索引符号的方法速度非常慢
符号引用
于是在解析阶段就会把符号索引全部替换为直接地址索引,直接通过地址就可以找到类的具体信息
直接引用


这就是连接阶段的所有过程,看到这里如果对你有帮助请点一个关注,下一篇更新初始化阶段

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cpp::STL—vector类的模拟实现(11)

文章目录 前言一、各函数接口总览二、默认成员函数vector();vector(size_t n, const T& val T( ));template< class InputIterator> vector(InputIterator first, InputIterator last);vector(const vector<T>& v);vector<T>& operator(const v…

腾讯云SDK基本概念

本文旨在介绍您在使用音视频终端 SDK&#xff08;腾讯云视立方&#xff09;产品过程中可能会涉及到的基本概念。 音视频终端 SDK&#xff08;腾讯云视立方&#xff09; 应用 音视频终端 SDK&#xff08;腾讯云视立方&#xff09;通过应用的形式来管理您的项目&#xff08;Ap…

C/C++进阶(一)--内存管理

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; 学习专栏C语言_Stark、的博客-CSDN博客 其它专栏&#xff1a; 数据结构与算法_Stark、的博客-CSDN博客 ​​​​​​项目实战C系列_Stark、的博客-CSDN博客 座右铭&a…

免费录屏软件工具:助力高效屏幕录制

录屏已经成为了一项非常实用且广泛应用的技术。无论是制作教学视频、记录游戏精彩瞬间&#xff0c;还是进行软件操作演示等&#xff0c;我们都常常需要一款可靠的录屏软件。今天&#xff0c;就让我们一起来探索那些功能强大录屏软件免费版&#xff0c;看看它们是如何满足我们多…

ARTS Week 42

Algorithm 本周的算法题为 2283. 判断一个数的数字计数是否等于数位的值 给你一个下标从 0 开始长度为 n 的字符串 num &#xff0c;它只包含数字。 如果对于 每个 0 < i < n 的下标 i &#xff0c;都满足数位 i 在 num 中出现了 num[i]次&#xff0c;那么请你返回 true …

【数据结构强化】应用题打卡

应用题打卡 数组的应用 对称矩阵的压缩存储 注意&#xff1a; 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意&#xff1a; 上/下三角压缩存储是将0元素统一压缩存储&#xff0c;而不是将对角线元素统一压缩存储 三对角矩阵的…

接口隔离原则在前端的应用

什么是接口隔离 接口隔离原则&#xff08;ISP&#xff09;是面向对象编程中的SOLID原则之一&#xff0c;它专注于设计接口。强调在设计接口时&#xff0c;应该确保一个类不必实现它不需要的方法。换句话说&#xff0c;接口应该尽可能地小&#xff0c;只包含一个类需要的方法&am…

SKD4(note上)

微软提供了图形的界面API&#xff0c;叫GDI 如果你想画某个窗口&#xff0c;你必须拿到此窗口的HDC #include <windows.h> #include<tchar.h> #include <stdio.h> #include <strsafe.h> #include <string>/*鼠标消息 * 键盘消息 * Onkeydown * …

实验 3 存储器实验

实验 3 存储器实验 1、实验目的 掌握静态随机存储器 RAM 的工作特性。掌握静态随机存储器 RAM 的读写方法。 2、实验要求 (1)做好实验预习&#xff0c;熟悉MEMORY6116 芯片各引脚的功能和连接方式&#xff0c;熟悉其他实验元器件的功能特性和使用方法&#xff0c;看懂电路图…

CSS | 响应式布局之媒体查询(media-query)详解

media type(媒体类型)是CSS 2中的一个非常有用的属性&#xff0c;通过media type我们可以对不同的设备指定特定的样式&#xff0c;从而实现更丰富的界面。media query(媒体查询)是对media type的一种增强&#xff0c;是CSS 3的重要内容之一。随着移动互联网的发展&#xff0c;m…

中国靠谱热门交友软件app排行榜前十名测评

在信息飞速发展的时代&#xff0c;交友软件层出不穷。究竟哪些才是靠谱又热门的呢&#xff1f;这份交友软件 app 排行榜将为你揭晓&#xff0c;带你走进不同的社交天地&#xff0c;开启精彩交友之旅。 咕哇找搭子小程序&#xff1a;这是一个实名制的找搭子交友平台&#xff0c;…

基于ssm的学生社团管理系统 社团分配系统 社团活动调度平台 学生社团管理 信息化社团管理开发项目 社团活动管理 社团预约系统(源码+文档+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

时尚科技融合:Spring Boot下的“衣依”服装销售平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

虚拟机三种网络模式详解

在电脑里开一台虚拟机&#xff0c;是再常见不过的操作了。无论是用虚拟机玩只有旧版本系统能运行的游戏&#xff0c;还是用来学习Linux、跑跑应用程序都是很好的。而这其中&#xff0c;虚拟机网络是绝对绕不过去的。本篇文章通俗易懂的介绍了常见的虚拟网络提供的三种网络链接模…

小红书AI配音神器:3秒变声百种风格

小红书AI配音神器&#xff1a;3秒变声百种风格 小红书推出黑科技FireRedTTS&#x1f3a4;&#xff0c;3秒克隆你的声音✨&#xff0c;支持搞怪、温柔等多种风格&#x1f389;&#xff01;只需几秒参考音频&#xff0c;轻松生成个性化语音&#xff0c;短视频配音神器&#x1f3…

把白底照片变蓝色用什么软件免费 批量更换证件照底色怎么弄

作为专业的修图师&#xff0c;有时候也会接手证件照修图和换底色工作&#xff0c;这种情况下&#xff0c;需要换底色的照片也许达到上百张。为了提高工作效率&#xff0c;一般需要批量快速修图&#xff0c;那么使用什么软件工具能够给各式不同的照片批量更换背景色呢&#xff1…

Python并发编程(1)——Python并发编程的几种实现方式

更多精彩内容&#xff0c;请关注同名公众&#xff1a;一点sir&#xff08;alittle-sir&#xff09; Python 并发编程是指在 Python 中编写能够同时执行多个任务的程序。并发编程在任何一门语言当中都是比较难的&#xff0c;因为会涉及各种各样的问题&#xff0c;在Python当中也…

【Unity AI】基于 WebSocket 和 讯飞星火大模型

文章目录 整体AIManagerDialogueManagerUIManagerModelManagerAudioManagerSaveManager 详细部分AIUI动画音频 整体 AIManager 负责配置讯飞的appId&#xff0c;生成鉴权URL&#xff0c;通过WebSocket向服务器请求并返回数据&#xff08;分为最终返回和流式返回&#xff09; …

C++基础(6)——模板初阶

目录 1.泛型编程 2.函数模板 2.1函数模板的概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.4.1隐式实例化&#xff1a;让编译器根据实参推演模板参数的实际类型 2.4.2显式实例化&#xff1a;在函数名后的<>中指定模板参数的实际类型 2.5 模板…

C++ WebDriver扩展

概述 WebDriver协议基于HTTP&#xff0c;使用JSON进行数据传输&#xff0c;定义了client与driver之间的通信标准。无论client的实现语言&#xff08;如Java或C#&#xff09;&#xff0c;都能通过协议中的endpoints准确指示driver执行各种操作&#xff0c;覆盖了Selenium的所有功…