建设课程网站的目的/seo专业培训技术

建设课程网站的目的,seo专业培训技术,沈阳市住房和城乡建设厅网站,徐州专业网站制作java 文件经过javac编译后,变成了存储了一系列指令的.class文件。本文从指令层面分析Java 方法从解析、调用到执行的过程。 1 指令 一般格式:操作码 [操作数1] [操作数2] ... 操作码 1个字节的无符号整数(范围:0x00 ~ 0xFF&…

java 文件经过javac编译后,变成了存储了一系列指令的.class文件。本文从指令层面分析Java 方法从解析、调用到执行的过程。

1 指令

一般格式:操作码 [操作数1] [操作数2] ...

操作码

1个字节的无符号整数(范围:0x00 ~ 0xFF)。

特点:1)每个操作码对应一个助记符(如iconst_1,iload,iadd等)。2)操作码决定了操作数类型及个数。

操作数

操作码所需的参数,紧跟在操作码后面。

表 指令的组成

1.1 未对齐的操作数

操作数的基本单位是字节。为了让.class文件更紧凑,jvm没有让操作数对齐。这意味着JVM需要逐个字节读取。

例如指令:0x11 0x03 0xE8 (sipush 1000)

0x11 是操作码,它的助记符是sipush。这个操作码的参数是1个2字节长度的操作数。

jvm 先读取第1个字节0x03,然后读取第2个字节 0xE8,最后将这两个字节组合:

(0x03 << 8) | 0xE8 => 0x03E8。

1.2 指令的执行模型

不考虑异常处理的话,JVM的解释器解析.class文件中的指令伪代码如下:

do {PC 寄存器值++;根据PC寄存器指示的位置,读取操作码;if (操作码需要操作数) 读取操作数;执行操作码所定义的操作;
} while(字节流长度 > 0);

1.3 方法相关指令

invokestatic

静态方法。

invokespecial

需要特殊处理的实例方法,包括实例初始化、私有方法、和super调用。

invokevirtual

虚方法分派(可被重写的方法及final方法)。

invokeinterface

接口方法,在运行期间再确定一个实现该接口的对象。

invokedynamic

先在运行时动态解析调用点限定符所引用的方法,然后再执行该方法。Java 7 引入,用于支持动态语言特性,比如Lambda

表 调用方法的指令

方法调用指令和数据类型无关,而方法返回指令根据返回值类型区分,包括ireturn、lreturn、freturn、dreturn、areturn(返回值为对象、数组等引用类型)及return(返回值为void)。

1.3.1 类与实例的初始化

<clinit>

类(或接口)的静态初始化方法。用于执行静态变量的赋值和静态代码块。

如果父类未初始化,会先触发父类的clinit方法,但接口的clinit不会因为实现类的初始化而触发(需要直接使用接口的静态变量才触发)。

<init>

对象的初始化方法,用于实例变量的赋值、实例代码块及构造器。

每个构造器对应一个init方法;子类构造器会隐式调用父类的init方法。

表 类与实例初始化方法

<clinit> 与<init>方法都是由编译器自动生成,用户无法调用。

2 方法调用

java 是一门静态多分派(和接收者及参数有关)、动态单分派(只能接收者有关)的语言。

静态分派:方法的静态类型在编译阶段是可知的(如方法重载,取决于参数类型、数量及位置)。

动态分派:运行时类型要在运行期才可知(方法重写,取决于执行对象的实际类型)。

2.1 虚方法表

JVM 在类初始化过程中,会为这个类维护一个虚拟方法表,存储该类所有可被重写的方法的入口地址。

虚方法表可理解为一个数组,每个数组元素(槽位)存储的是方法的入口地址。

虚方法表创建步骤如下

1)父类的方法按声明顺序占据虚方法表的固定槽位。

2)子类继承父类的虚方法表,并保留父类方法的地址。

3)如果子类重写了父类的方法,子类的虚方法中对应的槽位会被替换为子类方法的地址。

4)子类新增的方法追加到虚方法表的末尾。

例如 Animal类又两个可重写的方法sound和eat,Dog类继承Animal类,并重写了eat方法,又新增了一个方法wagTail。则这两个类的虚方法表如下。

Animal类的虚方法表

Dog类的虚方法表

索引

方法地址

索引

方法地址

0

Animal.sound()

0

Animal.sound()

1

Animal.eat()

1

Dog.eat()

2

Dog.wagTail()

表 Animal 与 Dog类的虚方法表

2.1.1 动态分派过程

当父类引用调用方法时,JVM执行步骤如下:

  1. 获取对象的实际类型。
  2. 根据对象的实际类型查找对应的虚方法表。
  3. 根据方法调用指令的操作数(虚方法表的索引),找到方法入口地址。
  4. 执行对应方法。

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

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

相关文章

Linux系统管理与编程08:任务驱动综合应用

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 [环境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境&#xff1a;Lamp&#xff08;linux httpd mysql8.0 php&#xff09; [步骤] 3 …

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(frontrear)-出队-入队-队尾满了&#xff0c;调整队列-获取队头元素——完整可运行代码 #include <stdio.h>#define MAXSIZE 100 typedef int ElemType;typedef struct {ElemType data[MAXSIZE];int front;int…

基于LabVIEW的Windows平台高速闭环控制

在Windows系统下&#xff0c;通过LabVIEW实现高速闭环控制面临两大核心挑战&#xff1a;非实时操作系统的调度延迟与硬件接口的传输速度限制。以USB-6351&#xff08;NI USB-6351 DAQ卡&#xff09;为例&#xff0c;其理论采样率可达1.25 MS/s&#xff08;单通道&#xff09;&a…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整活…

scrapy入门(深入)

Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站点并从页面中提取结构化的数据&#xff0c;只需要实现少量的代码&#xff0c;就能够快速的抓取。 新建项目 (scrapy startproject xxx)&#xff1a;新建一个新的…

FastGPT 社区版快速部署指南

产品简介 FastGPT 是基于大语言模型的智能知识库系统&#xff0c;提供以下核心能力&#xff1a; ✅ 开箱即用 - 内置数据预处理、多模型对接、权限管理 ✅ 可视化编排 - 通过 Flow 工作流实现复杂问答逻辑设计 ✅ 多场景适配 - 支持客服机器人/知识检索/数据分析等场景 &…

【css酷炫效果】纯CSS实现科技感网格背景

【css酷炫效果】纯CSS实现科技感网格背景 缘创作背景html结构css样式完整代码基础版进阶版(3D光线扫描版) 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;上传后更新 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&#xff0c;赶时间&a…

vue3:十一、主页面布局(左侧菜单折叠展开设置)

一、实现效果 二、基本实现 1、菜单容器增加展开收缩方法 在菜单容器中开启这个方法&#xff0c;值设置为一个变量 :collapseiscollapse 2、定义菜单收缩与否的变量 在js中初始化是否收缩的变量&#xff0c;初始值为不收缩(也就是展开) //左侧菜单展开与收缩 const iscolla…

Chapter 4-15. Troubleshooting Congestion in Fibre Channel Fabrics

show zone member: Shows the name of the zone to which a device belongs to. This command can be used to find the victims of a culprit device or vice versa. 显示设备所属的区域名称。该命令可用于查找罪魁祸首设备的受害者,反之亦然。 show zone active: Shows the…

网络爬虫【爬虫库request】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 Requests是Python的一个很实用的HTTP客户端库&#xff0c;完全满足如今网络爬虫的需求。与Urllib对比&#xff0c;Requests不仅具备Urllib的全部功能&#xff1b;在开发使用上&…

MTKAndroid12 解决SystemUI下拉框中,长按WIFI图标会导致崩溃问题

解决SystemUI下拉框中&#xff0c;长按WIFI图标会导致崩溃问题 文章目录 场景参考资料修改文件解决方案日志源码分析 总结 场景 在部分产品中偶发性发现&#xff0c; SystemUI下拉框下拉后长按WIFI图标会导致崩溃问题&#xff0c;有时候是截屏、点击Home 按键后&#xff0c;长…

XSS基础靶场练习

目录 1. 准备靶场 2. PASS 1. Level 1&#xff1a;无过滤 源码&#xff1a; 2. level2&#xff1a;转HTML实体 htmlspecialchars简介&#xff1a; 源码 PASS 3. level3:转HTML深入 源码&#xff1a; PASS 4. level4:过滤<> 源码&#xff1a; PASS: 5. level5:过滤on 源码…

熔断降级(Sentinel解决)

问题概述 在微服务架构中一定要预防微服务雪崩问题&#xff0c;微服务雪崩问题就是指在微服务架构中&#xff0c;当一个服务出现故障时&#xff0c;由于服务之间的依赖关系&#xff0c;故障可能会传播到其他服务&#xff0c;从而导致了大规模的服务失败&#xff0c;系统无法正…

TPCTF 2025 web 复现

文章目录 baby layoutsafe layoutSafe Layout Revengesupersqli baby layout 在index.js文件中&#xff0c;看到了有使用DOMPurify库来防止XSS操作 在package.json里可以看到版本是3.2.4,关于3.2.3是有绕过策略的。它会把script标签清除掉&#xff0c;去看bot可以看到flag是放…

Agent Team 多智能体系统解析

引言 在人工智能技术高速发展的今天&#xff0c;"多智能体协作系统"&#xff08;Agent Team&#xff09;正成为突破效率瓶颈的关键技术。与传统的单体AI不同&#xff0c;这种由多个专业化智能体组成的协同网络&#xff0c;通过分工协作和动态调整&#xff0c;展现出…

bootstrap 表格插件bootstrap table 的使用经验谈!

最近在开发一个物业管理软件&#xff0c;其中用到bootstrap 的模态框。同时需要获取表格数据。用传统的方法&#xff0c;本人不想用&#xff0c;考虑到bootstrap应该有获取表格数据的方法&#xff0c;结果发现要想实现获取表格数据功能&#xff0c;需要通过bootstrap的插件实现…

循环不变量原则——螺旋矩阵

题目&#xff1a;螺旋矩阵 本题相较于螺旋矩阵II的不同之处是&#xff1a;螺旋矩阵II的矩阵是n行n列的方阵&#xff0c;而本题的矩阵并不一定是方阵。所以在遵循循环不变量原则遍历完矩阵后&#xff0c;还会有一行或者一列没有遍历。 1、行多列少&#xff08;多一列没遍历&am…

【前端】Visual Studio Code安装配置教程:下载、汉化、常用组件、基本操作

文章目录 一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2、view-in-browser3、Live Server 四、基本操作五、感谢观看&#xff01; 一、Visual Studio Code下载 下载官网&#xff1a;https://code.visualstudio.com/ 进入官网后点击右上角的Download &…

Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)

下载驱动包 访问 backport-iwlwifi-dkmshttps://launchpad.net/ubuntu/source/backport-iwlwifi-dkms 网站&#xff0c;找到适用于Ubuntu 22.04的update版本&#xff08;如backport-iwlwifi-dkms_xxxx_all.deb&#xff09;&#xff0c;下载至本地。 安装驱动 在下载目录中执行以…

kaggle上经典泰坦尼克项目数据分析探索

之前了解在kaggle上这个项目很火&#xff0c;最近想要加强一下python数据分析&#xff0c;所以在kaggle上找到这个项目进行学习探索&#xff0c;下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…