Java中类装载的执行过程

 类装载的执行过程

类从加载到虚拟机中开始,直到卸载为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三个部分统称为连接(linking)。

1.加载

通过类的全名,获取类的二进制数据流。

解析类的二进制数据流为方法区内的数据结构(Java类模型)

创建java.lang.Class类的实例,表示该类型。作为方法区这个类的各种数据的 访问入口。

         把该类的二进制数据流读入到运行时数据区,在元空间中存储类的信息。在堆中开辟一个空间,存储当前类的Class对象,方便后期创建对象时使用。

2.验证

验证类是否符合JVM规范,安全性检查

(1)文件格式验证:

        是否符合Class文件的规范。

(2)元数据验证:

        这个类是否有父类(除了Object这个类之外,其余的类都应该有父类)

        这个类是否继承(extends)了被final修饰过的类(被final修饰过的类表示类不能被继承)

        类中的字段、方法是否与父类产生矛盾。(被final修饰过的方法或字段是不能 覆盖的)

(3)字节码验证:

        主要的目的是通过对数据流和控制流的分析,确定程序语义是合法的、符合逻辑的。

(4)符号引用验证:

        Class文件在其常量池会通过字符串记录自己将要使用的其他类或者方法,检查它们是否存在例:方法或者类在引用时,都会到常量池中查表翻译,找到对应的类或方法。符号引用验证主要就是判断这些类或方法是否存在,不存在就会报错。

注:1、2、3都是格式检验,如:文件格式是否错误、语法是否错误、字节码是否合规。

3.准备

为类变量分配内存并设置类变量初始值

1.static变量,分配空间在准备阶段完成(设置默认值),赋值在初始化阶段完成。

2.static变量是final的基本类型(因为其值不能再被修改),以及字符串常量,值已确定,赋值在准备阶段完成。

3.static变量是final的引用类型,那么赋值也会在初始化阶段完成。

说明:

1.b在准备阶段只会赋默认值0(int类型的默认值就是0),赋值在初始化阶段(b = 10)。

2.c、d在准备阶段就会赋值完成 c = 20;d = "hello";

3.obj是引用类型,也是在初始化阶段赋值。

4.解析

把类中的符号引用转换为直接引用

比如:方法中调用了其他方法,方法名可以理解为符号引用,而直接引用就是使用指针直接指向方法。

说明:这里一开始是符号引用,#4 --> #25 --> #32 -> 对应方法。而直接引用就是直接找到对应要执行的方法。

5.初始化

对类的静态变量,静态代码块执行初始化操作。

初始化规则:

        如果初始化一个类的时候,其父类尚未初始化,则优先初始化其父类。

         如果同时包含多个静态变量和静态代码块,则按照自上而下的顺序依次执行。

6.使用

JVM 开始从入口方法开始执行用户的程序代码

        调用静态类成员信息(比如:静态字段、静态方法)

        使用new关键字为其创建对象实例

这两种情况都算类被实际使用

7.卸载

当类不再被使用,且没有任何活跃的类加载器实例时,类及其相关的资源将被垃圾回收器回收。

小结

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习记录(9):Prompt提示词技巧

依旧照例先感谢前辈们的慷慨分享 今天学习的是这篇文章↓ 原文:转自公主号“博金斯的AI笔记” —《4篇Prompt论文的提示词技巧, 3 个 GPTs 实例测试》 文章目录 一、提示词框架二、逻辑链(Chain of thought)三、思维树(Tree of th…

[渗透测试学习] PermX-HackTheBox

文章目录 PermX-HackTheBox信息搜集漏洞利用权限提升参考文章PermX-HackTheBox 信息搜集 nmap扫描一下端口 nmap -sC -v 10.10.11.23扫描结果如下 PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 256 e2:5c:5d:8c:47:3e:d8:72:f7:b4:80:03:49:86:6d:ef (ECDSA…

二维码直达App,Xinstall为你打通运营任督二脉

在移动互联网时代,App的推广和运营显得尤为重要。然而,许多企业在投入大量资源进行App推广和运营时,总会遇到一些棘手的问题,如用户转化率低、数据分析困难等。今天,我们要为大家揭秘一个神奇的助手——Xinstall&#…

Github2024-07-29 开源项目周报Top15

根据Github Trendings的统计,本周(2024-07-29统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目2Java项目2HTML项目2C项目2TypeScript项目2JavaScript项目2非开发语言项目1Vue项目1Go项目1Dart项目1C++项目1Rust项目1Jupyter Note…

【Linux】-----进度条小程序

目录 前言 基本知识 Ⅰ、回车和换行 Ⅱ、缓冲区 两个有意思的现象 简单定义 刷新缓冲区 简易倒计时程序 进度条代码 多文件下makefile写法 一代(无任何场景) procs1.h代码 procs1.c代码 主函数main1.c 一代运行结果: 二代 (搭配下载场景) procs2.c代…

在jmeter中使用javascript脚本

工作上遇到一个压力测试的需求,需要测试几个考试相关的接口。其中有一个获取试题详情的接口,和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数,添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求,这…

MySQL分组查询有关知识总结

目录 4. 分组查询(group by) 4.1 概述 4.2 分组函数 4.2.1 单个使用 4.2.2 组合使用 4.2.3 注意! 4.3 group by 4.3.1 单个字段 4.3.2 多个字段 4.3.3 提醒! 4.4 having 4.5 分组查询演示 4. 分组查询(…

稀疏矩阵和稠密矩阵

1.csr_matrix compress sparse row,因此csr是按行压缩的稀疏矩阵。 稀疏矩阵由于0值过多,仅记有值的矩阵位置索引,如下图打印所示。 更多矩阵介绍参考这篇博文【Scipy学习】Scipy中稀疏矩阵用法解析(sp.csr_matrix;s…

国家网络身份个人认证方法

申领网络身份认证后,用户会得到一张虚拟的“网络身份证”,它可以向需要实名认证的互联网平台进行认证,不再需要输入姓名和身份证号等信息。 申请方式:各手机应用平台搜索国家网络身份认证即可(必须支持NFC才能申请&am…

大模型三种模式Embedding、copilot、Agent

大模型的三种应用模式——Embedding、Copilot、Agent——代表了不同级别的智能化和自动化程度,以及与人类用户的交互方式。下面是每种模式的具体解释: 嵌入模式(Embedding Mode) 定义:在嵌入模式中,大模型…

每日一题——贪心算法

1005. K 次取反后最大化的数组和 - 力扣(LeetCode) 题解: 一开始有点理解错他的意思,以为是i是题目中会给出,所以一开始没有什么思路,然后当看了题解之后,就知道了原来i是自己订的&#xff0c…

认识经典蓝牙

现在BLE很流行,本人接触BLE也更多,而对经典蓝牙BR/EDR的开发知之甚少,而且网上关于经典蓝牙的资料也很少,所以,想要有更多了解。 参考: https://www.nordicsemi.cn/news/bluetoothle-and-bluetoothclassic/…

网页设计师必备!10个免费的设计素材网站推荐

当网页设计师使用网页设计材料时,他们会优先考虑那些免费和高质量的网页设计材料网站。找到一个免费和高质量的网页设计材料网站并不容易,有些网站要么需要打开材料网站成员,要么设计材料质量很差。即时设计总结了10个免费的网页设计材料网站…

WEB服务器的详解与部署

WEB服务器也称为网页服务器或HTTP服务器 WEB服务器使用的协议是HTTP或HTTPS HTTP协议默认端口号:TCP 80 HTTPS协议默认端口号:TCP 443 浏览器其实就是 HTTP 客户端 WEB服务器发布软件 微软:IIS(可以发布web网站和FTP站点)linux&#x…

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——2Yolo使用之ONNX模型准备

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——2Yolo使用之ONNX模型准备 ​ 大家好,因为板端BPU环境,可以加速目标检测的速度,所以今天在此先给大家带来如何准备一个模型,下一期会给大家带来如何在板端部…

PromQL全方位解读:监控与性能分析的关键技术

一、PromQL简介 Prometheus Query Language (PromQL) 是一个专为Prometheus监控系统设计的强大查询语言,它允许用户对收集的时间序列数据进行高效、灵活的查询和分析。PromQL的设计哲学在于提供简洁而强大的语法,以支持复杂的数据检索和实时监控场景。本…

7B 开源模型突破 IMO 形式化证明,霸榜数学竞赛

总览 去年底,著名数学家、菲尔兹奖获得者陶哲轩就提出 AI 将加速数学研究,成为数学家的可靠伙伴,并且在形式化语言 Lean 的帮助下,成功证明了多项式 Freiman-Ruzsa 猜想。在今年的国际数学奥林匹克竞赛(IMO&#xff0…

24澳中博览会|2025非洲水协年会暨展览|2025山西水展

2024澳中博览会 2025非洲水协年会暨展览 2025年山西国际水展暨水利工程设计与施工、水处理技术设备、泵管阀、智慧水务及环保展 承办单位:山西泽嘉国际展览有限公司 上海泽嘉展览服务有限公司 战略合作伙伴 : 美国迈阿密水展 欧 洲 海 水 脱 盐 淡 化…

新版Next.js 15中5个令人惊叹的特性

前端岗位内推来了 Next.js 15已经到来,一切比以往更好! 从全新的编译器到700倍更快的构建时间,创建具有卓越性能的全栈Web应用从未如此简单。 让我们探索v15的最新特性: 1. create-next-app升级:更清晰的UI&#xff0c…

Android进程保活:如何让app一直运行

目录 1)为什么需要进行进程保活呢?需求是什么? 2)进程分类 3)进程的优先级 4)如何提高进程优先级 5)如何进行进程保活 一、为什么需要进行进程保活呢?需求是什么? 比如…