Java虚拟机学习笔记(二)——类文件结构与字节码指令

risc-v指令集手册(非特权架构)- ‘Zicsr’控制和状态寄存器(CSR)指令V2.0(已批准) RISC-V定义了与每个hart关联的4096个控制和状态寄存器的单独地址空间。本章定义了在这些CSR上运行的完整CSR指令集。虽然CSR主要由特权体系结构使用,但非特权代码中有多种用途,包括用于计数器和计时器以及浮点状态。计数器和计时器不再被视为标准基本ISA的必需部分,因此访问它们所需的CSR指令已从基本ISA章节移至该单独的章节。 阅读详情

Java虚拟机学习笔记(二)——类文件结构

1.Class类文件结构

任何一个Class文件对应着唯一一个类或者是接口定义信息。

Class文件是一组以8字节为基础单位的二进制流,各个数据紧凑严格的按照顺序排列在文件中,中间没有任何添加分割的分隔符,使得Class文件中全是程序运行的必要数据。当遇到需要占用8字节以上的数据时,会按照高位在前的方式分割成若干个8个字节进行存储。

Class 文件格式一般采用一种伪结构来存储数据,这种伪结构有两种数据类型

  • 无符号数 u1、u2、u4、u8分别代表1字节、2字节、4字节、8字节的无符号数

  • 表 表是由多个无符号数或者其他表作为数据结构构成的复杂数据类型,表的命名习惯以“_info”结尾。整个Class文件可以视为一张表,这张表由下图所示的数据项严格构成。
    在这里插入图片描述
    在这里插入图片描述

1.1 魔数与版本

前四个字节是一个固定值,我们通过字节码可以看到 ca fe ba be,它用来确定此文件是否是一个能被虚拟机接受的Class文件。

使用魔数而不是扩展名来进行识别主要是因为扩展名可以被随意地修改。

接下来两个字节是次版本号(Minor Version),从JDK1.2到JDK12版本号均未使用,都为零,JDK12后,设计者重新启用次版本号。

第七和第八字节是主版本号(Major Version),对应规则如下:
在这里插入图片描述
可以看到,我的第七第八字节是 00 34,这是十六进制的数,我们换算成十进制为52,对应着JDK版本号为JDK8.

1.2 常量池

接下来两字节是常量池容量计数器,00 22,对应着应该有34个常量,但是,这里要注意,我们的常量池的容量计数不是从零开始的,而是从一开始的,表示着我们的常量索引是从“1~33”,实际只有33项。

我们使用javap -v 来验证一下:
在这里插入图片描述
可以看到,常量池这有33项。同时,使用javap -v 已经将我们Class文件中的字节码转换成我们可以看懂的命令了。

我们可以看到,常量池中主要存放两大类的常量:字面量和符号引用。

1.3 其他:

访问标志、类索引、父类索引、接口索引集合、字段表集合、方法表集合、属性表集合。

2.字节码指令

2.1 加载和存储指令

将一个局部变量加载到操作栈:iload、lload、fload、dload、aload

将一个数值从操作数栈存储到局部变量表中:istore、lstore、fstore、dstore、astore

将一个常量加载到操作数栈:bipush、sipush、ldc、iconst、lconst、fconst、dconst

2.2 运算指令

加法指令:iadd、ladd、fadd、dadd

减法指令:isub、lsub、fsub、dsub

乘法指令:imul、lmul、fmul、dmul

除法指令:idiv、ldiv、fdiv、ddiv

求余指令:irem、lrem、frem、drem

取反指令:ineg、lneg、fneg、dneg

位移指令:ishl、ishr、iushl、lshl、lshr、lushr

按位或指令:ior、lor

按位与指令:iand、land

按位异或指令:ixor、lxor

局部变量自增指令:iinc

比较指令:dcmpg、dcmpl、fcmpg、fcmpl、lcmp

2.3 对象创建与访问指令

创建类实例的指令:new

创建数组的指令:newarray、anewarray、multianewarray

访问类字段(static,或者称为类变量)和实例字段(实例变量)指令:getfield、putfield、getstatic、putstatic

取数组长度指令:array length

检查类实例类型的指令:instanceof、checkcast

2.4 操作数栈管理指令

将操作数栈顶的一个或两个元素出栈:pop、pop2

复制栈顶一个或两个数值并将复制值或双份复制值重新压入栈顶:dup、dup2…

将栈最顶端的两个数值互换:swap

2.5 方法调用和返回指令

invokevirtual:用于调用对象的实例方法,根据对象的实际类型进行分派。

invokespecial:用于调用一些需要特殊处理的实例方法,包括实例初始化方法、私有方法、父类方法。

invokeinterface:用于调用接口方法,会在运行时搜索一个实现了这个接口的方法对象,找出合适的方法进行调用。

invokestatic:调用类的静态方法。

2.6 其他

异常处理指令、同步指令、控制转移指令。

书籍
《深入了解Java虚拟机》

RISC-V(2)——特权级及特权指令集 一个 RISC-V 硬件线程()是运行在某个特权级上的,这个特权级被编码到一个或者多个控制和状态寄存器)中的一种模式。当前定义了四种特权级,如下所示。特权级的作用现象机器级是最高级特权,也是 RISC-V 硬件平台唯一必须的特权级。所有硬件实现必须提供M-mode,因为这是唯一的模式,可以不受限制地访问整个机器。最简单的RISC-V实现可以仅提供M-mode,虽然这样做不能为防止不正确的、恶意应用代码提供保护。 阅读详情

相关推荐

从零开始学RISC-V之CSR访问

文章目录背景介绍开始Coding指令译码算术运算测试程序仿真结果及分析 背景介绍 CSR,即Control and Status Register,控制与状态寄存器,属于CPU自带的一类寄存器(注意这里需要跟前文所述的通用数据寄存器区别开来,后文对这种寄存器称之为数据寄存器,以示区分)。在机器模式(Machine Mode,本项目只支持该模式)下这些存储器主要包括以下六类: 处理器信息相关:例如处理器的厂商信息,架构信息,核心数等等,是一个芯片自身的I固有信息。 中断配置相关:例如中断开关以及中断入口等信

滴石之水 4263

高性能编程专题-JVM--指令码

指令码 常量入栈指令 局部变量值转载到栈中指令 将栈顶值保存到局部变量中指令 wide指令 通用(无类型)栈操作指令 类型转换指令 整数运算 浮点运算 逻辑运算 控制流指令——条件跳转指令 控制流指令——比较指令 控制流指令——无条件跳转指令 控制流指令——表跳转指令 控制流指令——异常和finally 对象操作指令 数组操作指令 方法调用指令 方法返回指令 线程同步指令 ...

puwan4207的博客 952

【深入Java虚拟机】之二:Class类文件结构

Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。Java语言中的各种变量、关键字和运算符的语义最终都是由多条字节码命令组合而成的,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更强大,这便为

兰亭风雨的专栏 2万+

RISC-V特权架构 - CSR寄存器

我们知道,CSR寄存器被划分为4个级别:用户级、监管级、超级监管级、机器级。接下来,我们看看各个权级,具体定义了哪些寄存器。

百里杨的博客 1万+

(04730)半导体器件之基本放大器工作原理(一)

放大器是构成各种电子线路的基本单元电路。所谓“放大”,就是将输入的微弱信号(微弱变化的电压或电流等)去控制直流电源提供的能量,并使输出按照输入的小信号变化规律而变化的过程。所以放大器的本质是能量转换器。本节重点学习基本放大电路的工作原理和基本分析方法及主要性能指标。

黄先生的博客 3008

逆向拆解Android车机:VehicleHal如何通过HIDL与CarService通信?

本文深入剖析了Android Automotive OS中VehicleHal与CarService通过HIDL进行通信的底层机制。从逆向工程视角出发,详细介绍了如何捕获和分析HIDL调用日志,解析关键属性数据结构,并演示了利用SocketComm工具进行恶意属性注入攻击的实战路径,为车机系统安全评估提供了技术参考。

soda5的博客 723

剖析 Java 的类文件结构:字节码指令详解

Java 类文件是一种二进制文件,它遵循严格的格式规范。了解字节码指令有助于开发自定义编译器,将其他编程语言编译成 Java 字节码,实现跨语言的互操作性。Java 类文件结构和字节码指令是 Java 虚拟机的核心组成部分,深入理解它们对于掌握 Java 语言的运行机制和进行代码优化、安全审计等工作具有重要意义。通过本文的介绍,我们了解了 Java 类文件的基本结构、字节码指令的分类和执行过程,以及常见字节码指令的详细解释和应用场景。在实际开发中,我们可以使用javap。

潜意识Java的博客 1250

Dify 深度进阶:从入门到精通AI应用构建

《Dify进阶指南:从基础到高阶的AI应用开发技巧》 本文深入探讨Dify平台的高级功能与应用开发技巧。首先强调核心概念的深化,包括提示词工程进阶、知识库高效管理和模型参数优化。重点介绍智能体应用的开发方法,如何让AI具备自主规划与执行能力。同时讲解工作流编排、前端集成等实用技术,并分享应用运营优化、成本控制等实践经验。文章还展望了Dify生态的发展趋势,为开发者提供从基础到进阶的完整学习路径,助力打造更智能高效的AI应用。

同名公众号:dify实验室 1953

类文件结构和字节码指令

1、类型转换指令可以将两种不同的数值类型相互转换。这些转换操作一般用于实现用户代码中的显式类型转换操作,或者用来处理字节码指令集中数据类型相关指令无法与数据类型一一对应的问题。1、Java是面向对象的程序设计语言。虚拟机平台从字节码层面就对面向对象做了深层次的支持。有一系列指令专门用于对象操作,可进一步细分为创建指令、字段访问指令、数组操作指令、类型检查指令。1、操作数栈管理指令:如同操作一个普通数据结构中的堆栈那样,JVM提供的操作数栈管理指令,可以用于直接操作操作数栈的指令。pop、pop2。

xq514863的博客 862

Ollama本地大模型部署指南:从核心原理到实战避坑

大语言模型(LLM)作为人工智能领域的核心技术,通过海量数据训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制处理序列数据,在文本生成、代码编写和对话系统等场景展现出巨大价值。随着开源模型的普及,本地部署成为关注焦点,它解决了数据隐私和定制化需求,但面临环境配置和资源管理的挑战。Ollama作为开源工具,通过封装模型格式和统一API,简化了本地部署流程,支持GPU加速和性能调优,让开发者能够快速集成到IDE和自动化脚本中,实现高效的本地AI应用部署。

weixin_30915951的博客 453

ROSTEA软件下载及情感分析详细操作教程(附网盘链接)

原ROST虚拟团队出品的ROST系列文本内容挖掘分析平台,是辅助人文社会科学研究的免费计算平台。该软件可以实现文本预处理、分字、分词、词性识别、特殊名词抽取、词频统计、英文词频统计、情感计算、分类算法、聚类算法等一系列文本挖掘,是人文社科研究和论文写作的一把利器。该软件用户量超过一万人,遍布海内外100多所大学,包括剑桥大学、日本北海道大学、北京大学、清华大学、香港城市大学、澳门大学等众多高校。关于ROSTCM6的安装介绍可以参考之前的文章ROSTCM6软件下载及语义网络分析详细操作教程ROST EA。

m0_64336780的博客 1万+

《Java 虚拟机》类文件结构与字节码技术

JVM 类加载与字节码技术1. 类文件结构1.1 魔数1.2 版本号1.3 常量池1.4 访问标识与继承信息1.5 字段表信息1.6 方法表信息1.7 属性表集合2. 字节码指令2.3 图解方法执行流程 1. 类文件结构 我们直到,编译 .java 文件可以得到 .class 类字节码文件。 下面是一个简单的名为 HelloWorld.java 文件 public class HelloWorld { public static void main(String[] args) {

华仔仔的博客 1544

【MATLAB代码】二维平面的TOA定位,GDOP(几何精度因子)和CRLB(克拉美罗下界)计算与输出

本文介绍了一个MATLAB程序,用于计算二维定位场景中的几何精度因子(GDOP)和克拉美罗下界(CRLB)。该程序针对单目标和四个锚点配置,通过网格扫描法计算空间各点的GDOP分布,并以等高线图可视化展示。程序还可计算特定位置的理论定位精度下限(CRLB),输出X/Y方向标准差和GDOP值。核心算法通过构建几何矩阵和费舍尔信息矩阵实现,考虑了测量误差影响,并处理了特殊位置情况。程序提供了完整的源代码和参数修改说明,适用于定位系统精度分析。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 803

JVM(二)类文件结构

类文件结构介绍

qq_44818304的博客 1229

基于深度学习的心律失常的自动分类

基于深度学习的心律失常的自动分类 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 心律失常的危害与检测的重要性 心律失常是一种常见的心血管疾病,严重威胁着人们的健康和生命。据统计,全球每年有数百万人因心律失

AI架构师小马 1148

从一个 ASIN 看透亚马逊:商品模型背后的增长飞轮

在亚马逊电商体系中,每件商品背后都有一套严密的商品建模逻辑。本篇文章以“ASIN 的一生”为线索,系统拆解了亚马逊的商品模型:从飞轮战略出发,剖析 SDP(Single Detail Page)机制如何实现标准化展示;再到 ASIN 编码、父子变体结构与 Offer 分离模型,逐层解析商品信息如何被建构、聚合与呈现。通过图解与案例,文章帮助读者理解商品建品流程、同款聚合原则、价格控制机制等核心逻辑,避免常见运营误区,是一份面向运营、产品、技术人员的实用参考指南。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 13万+

Java虚拟机(JVM)(3)—— 字节码指令

Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于 Java 虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码。由于限制了 Java 虚拟机操作码的长度为一个字节(即 0~255),这意味着指令集的操作码总数不可能超过 256 条。

知唔猪的博客 1282

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【深入理解java虚拟机】 - JVM字节码指令介绍

Java源代码经过编译器编译之后会生成一个字节码文件,字节码是一种二进制的类文件,它的内容是JVM指令,而不像C或C++由编译器直接生成机器码。字节码指令由一个字节长度的、代表着某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。如果不考虑异常处理的话,那Java虚拟机的解释器可以使用下面这段伪代码作为最基本的执行模 型来理解: javap的用法 javap是 Java class文件分解器,可以反编译,也可以查看j

1+1=王的博客 3358

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

JAVA基础面试题:Java中的类文件结构(Class File Format)与字节码指令集解析

本次面试围绕Java类文件结构和字节码指令集展开了深入的讨论,涵盖了类文件的基本组成部分、字节码指令的分类、类加载机制、方法调用、异常处理以及字节码优化技术等核心知识点。Victor的回答体现了扎实的技术功底和系统性思维,为读者提供了全面而深入的技术解析。

qq_61302385的博客 858

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

class 类文件结构与字节码指令

任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,Class文件实际上它并不一定以磁盘文件的形式存在。

weixin_43519048的博客 1861

Java虚拟机——类文件结构(一)

《深入理解Java虚拟机》第二版 周志明 目录第六章 类文件结构 ~p162~无关性基石Class类文件的结构1. 魔数与Class文件的版本2. 常量池3. 访问标志4. 类索引、父类索引与接口索引集合5. 字段表集合 ~p175~6. 方法表集合 ~p178~7. 属性表集合 ~p180~· code属性 ~p182~· Exceptions属性 ~p188~· LineNumberTable属性 ~p189~· LocalVariableTable属性 ~p189~· SourceFile属

highmiao的博客 1303

字节码与指令集解析:深入Java虚拟机的执行引擎

🔍 Java字节码解析与执行机制深度解析 本文系统性地介绍了Java字节码的核心知识体系,包括Class文件结构、字节码指令集和JVM执行流程。主要内容包括: 字节码本质:作为Java的"机器语言",掌握字节码可实现精准性能调优、深度问题排查和高效代码编写 Class文件结构:详细解析了包括魔数、版本号、常量池等10个核心组成部分及其二进制格式 指令集系统:分类讲解加载存储、运算、控制转移等8类指令,提供常用指令速查表和方法调用指令对比 实践分析:通过javap工具反编译字符串拼接、条

qq_43414012的博客 737

JVM之常用的字节码指令(基于《深入理解Java虚拟机》之第六章类文件结构)(下)

dsadJava虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需的参数(称为操作数,Operand)构成。 dsad由于Java虚拟机采用面向操作数栈而不是面向寄存器的架构,所以大多数指令都不包含操作数,只有一个操作码,指令参数都存放在操作数栈中。 dsasadsdasdassadasdsadsdaasdasdassadasdasdasdsadasdasdsdadsadsadasdad——《深入理解Java虚拟机》 dsad 因此我们

置身于量子事业的软件开发爱好者 3610

JVM-类文件结构与字节码指令

类文件结构 字节码指令 1、类文件结构 一个简单的 HelloWorld.java // 二进制字节码(类基本信息,常量池,类方法定义,包含了虚拟机指令) public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); } } 执行 javac -parameters -d . HellowWorld.java 编译为 HelloWo

Eistert 243

类文件结构及字节码指令

文章目录一、Class类文件的结构1.1、魔数与Class文件的版本1.2、常量池1.3、访问标志1.4、类索引、父类索引与接口索引集合1.5、字段表集合1.6、方法表集合1.7、属性表集合二、字节码指令2.1、加载和存储指令2.2、运算指令2.3、类型转换指令2.4、对象创建及访问指令2.5、操作数栈管理指令2.6、控制转移指令2.7、方法调用指令2.8、方法返回指令2.9、异常处理指令2.10、同步指令 一、Class类文件的结构 Class文件时一组以8位字节为基础的二进制流,各个数据项目严格按照顺序

rockvine的博客 387
上一篇: Java虚拟机学习笔记(一)——Java内存区域与对象创建
下一篇: 设计模式学习(一)——六大原则
<天各一方>
博客等级 码龄6年 17粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值