JVM 常用字节码指令有哪些?

JVM学习指南(15)-如何阅读JVM字节码 字节码,也称为Java字节码,是JVM(Java虚拟机)执行的中间代码。它是Java源代码编译后的二进制形式,可以在任何安装了JVM的平台上运行。字节码的存在使得Java语言能够实现“一次编写,到处运行”的特性。 阅读详情

JVM 字节码指令集非常庞大,包含了大量的指令来完成各种操作。 我们只需要掌握一些常用的字节码指令即可。

以下是一些最常用、最核心的 JVM 字节码指令,按照功能类别进行划分:

1. 操作数栈 (Operand Stack) 操作指令:

  • nop (No Operation): 什么也不做,空指令,通常用于调试或占位。
  • aconst_null (Push null): 将 null 引用值推送到操作数栈顶。
  • iconst_m1, iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5 (Push int constant): 将 int 型常量 -1, 0, 1, 2, 3, 4, 5 推送到操作数栈顶。
  • fconst_0, fconst_1, fconst_2 (Push float constant): 将 float 型常量 0.0f, 1.0f, 2.0f 推送到操作数栈顶。
  • dconst_0, dconst_1 (Push double constant): 将 double 型常量 0.0d, 1.0d 推送到操作数栈顶。
  • lconst_0, lconst_1 (Push long constant): 将 long 型常量 0L, 1L 推送到操作数栈顶。
  • bipush <b> (Push byte): 将 byte 型常量 <b> 推送到操作数栈顶。
  • sipush <s> (Push short): 将 short 型常量 <s> 推送到操作数栈顶。
  • ldc <index> (Load constant): 从常量池中加载 int, float, String 类型常量或类引用推送到操作数栈顶。
  • ldc_w <index> (Load constant wide): 宽索引版本 ldc,用于加载常量池索引范围更大的常量。
  • ldc2_w <index> (Load constant wide 2): 从常量池中加载 long 或 double 类型常量推送到操作数栈顶 (占用两个栈槽)。
  • pop (Pop top operand stack value): 将栈顶数值弹出 (通常用于丢弃不需要的计算结果)。
  • pop2 (Pop top 2 operand stack values): 将栈顶两个数值弹出 (用于 long 和 double 类型,或两个非 long 和 double 类型的值)。
  • dup (Duplicate top operand stack value): 复制栈顶数值,并将副本压入栈顶。
  • dup_x1 (Duplicate top operand stack value and insert below): 复制栈顶数值,并将副本插入到栈顶数值之下。
  • dup_x2 (Duplicate top operand stack value and insert two values down): 复制栈顶数值,并将副本插入到栈顶数值之下两个位置。
  • dup2 (Duplicate top 1 or 2 operand stack values): 复制栈顶一个或两个数值,并将副本压入栈顶 (用于 long 和 double 或两个非 long 和 double 类型的值)。
  • dup2_x1 (Duplicate top 1 or 2 operand stack values and insert below): 复制栈顶一个或两个数值,并将副本插入到栈顶数值之下。
  • dup2_x2 (Duplicate top 1 or 2 operand stack values and insert two values down): 复制栈顶一个或两个数值,并将副本插入到栈顶数值之下两个位置。
  • swap (Swap top two operand stack values): 交换栈顶两个数值。

2. 局部变量表 (Local Variable Table) 访问指令:

  • iload <index>, fload <index>, aload <index>, lload <index>, dload <index> (Load from local variable): 将指定索引的 int, float, reference, long, double 型局部变量加载到操作数栈顶。
  • iload_0, iload_1, iload_2, iload_3 (Load int from local variable 0-3): 加载索引为 0, 1, 2, 3 的 int 型局部变量到栈顶 (更高效的指令)。
  • fload_0, fload_1, fload_2, fload_3 (Load float from local variable 0-3): 加载索引为 0, 1, 2, 3 的 float 型局部变量到栈顶。
  • aload_0, aload_1, aload_2, aload_3 (Load reference from local variable 0-3): 加载索引为 0, 1, 2, 3 的 reference 型局部变量到栈顶 (例如 this 引用通常在索引 0)。
  • lload_0, lload_1, lload_2, lload_3 (Load long from local variable 0-3): 加载索引为 0, 1, 2, 3 的 long 型局部变量到栈顶。
  • dload_0, dload_1, dload_2, dload_3 (Load double from local variable 0-3): 加载索引为 0, 1, 2, 3 的 double 型局部变量到栈顶。
  • istore <index>, fstore <index>, astore <index>, lstore <index>, dstore <index> (Store into local variable): 将栈顶的 int, float, reference, long, double 型数值存储到指定索引的局部变量。
  • istore_0, istore_1, istore_2, istore_3 (Store int into local variable 0-3): 将栈顶 int 型数值存储到索引为 0, 1, 2, 3 的局部变量 (更高效的指令)。
  • fstore_0, fstore_1, fstore_2, fstore_3 (Store float into local variable 0-3): 将栈顶 float 型数值存储到索引为 0, 1, 2, 3 的局部变量。
  • astore_0, astore_1, astore_2, astore_3 (Store reference into local variable 0-3): 将栈顶 reference 型数值存储到索引为 0, 1, 2, 3 的局部变量。
  • lstore_0, lstore_1, lstore_2, lstore_3 (Store long into local variable 0-3): 将栈顶 long 型数值存储到索引为 0, 1, 2, 3 的局部变量。
  • dstore_0, dstore_1, dstore_2, dstore_3 (Store double into local variable 0-3): 将栈顶 double 型数值存储到索引为 0, 1, 2, 3 的局部变量。

3. 运算指令:

  • 算术运算:
    • iadd, fadd, dadd, ladd (加法)
    • isub, fsub, dsub, lsub (减法)
    • imul, fmul, dmul, lmul (乘法)
    • idiv, fdiv, ddiv, ldiv (除法)
    • irem, frem, drem, lrem (求余数)
    • ineg, fneg, dneg, lneg (取反)
    • ishl, lshl (左移)
    • ishr, lshr (算术右移)
    • iushr, lushr (逻辑右移)
    • iand, land (按位与)
    • ior, lor (按位或)
    • ixor, lxor (按位异或)
    • iinc <index> <const> (int 变量自增,局部变量表操作)
  • 类型转换:
    • i2b, i2c, i2s (int 转 byte, char, short)
    • i2l, i2f, i2d (int 转 long, float, double)
    • l2i, l2f, l2d (long 转 int, float, double)
    • f2i, f2l, f2d (float 转 int, long, double)
    • d2i, d2l, d2f (double 转 int, long, float)
  • 比较:
    • lcmp (long 比较)
    • fcmpl, fcmpg (float 比较,l 表示 NaN 时结果为 -1,g 表示 NaN 时结果为 1)
    • dcmpl, dcmpg (double 比较,l 表示 NaN 时结果为 -1,g 表示 NaN 时结果为 1)

4. 类型转换和检查指令:

  • checkcast <class> (Check whether object is of given type): 检查对象是否是指定类型,如果是则继续,否则抛出 ClassCastException。
  • instanceof <class> (Determine if object is of given type): 检查对象是否是指定类型的实例,结果 (1 或 0) 推送到操作数栈顶。

5. 对象操作指令:

  • new <class> (Create new object): 创建一个对象,但不初始化,只在堆上分配空间,并将未初始化的对象引用推送到操作数栈顶。
  • anewarray <component type> (Create new array of references): 创建一个指定组件类型的引用类型数组,数组长度从操作数栈弹出。
  • newarray <atype> (Create new array of primitive type): 创建一个指定基本类型的基本类型数组,数组长度从操作数栈弹出 (例如 int, boolean, char 等)。
  • arraylength (Get length of array): 获取数组长度,数组引用从操作数栈弹出,数组长度推送到栈顶。
  • aaload, baload, caload, saload, iaload, laload, faload, daload (Load from array): 从数组中加载元素,数组引用和索引从操作数栈弹出,加载的元素值推送到栈顶 (对应 reference, byte, char, short, int, long, float, double 类型)。
  • aastore, bastore, castore, sastore, iastore, lastore, fastore, dastore (Store into array): 将值存储到数组中,数组引用、索引和要存储的值从操作数栈弹出 (对应 reference, byte, char, short, int, long, float, double 类型)。
  • getfield <field> (Fetch field from object): 获取对象的实例字段的值,对象引用从操作数栈弹出,字段值推送到栈顶。
  • putfield <field> (Set field in object): 设置对象的实例字段的值,对象引用和要设置的字段值从操作数栈弹出。
  • getstatic <field> (Get static field from class): 获取类的静态字段的值,字段值推送到操作数栈顶。
  • putstatic <field> (Set static field in class): 设置类的静态字段的值,要设置的字段值从操作数栈弹出。

6. 方法调用和返回指令:

  • invokevirtual <method> (Invoke virtual method): 调用对象的虚方法 (运行时多态)。
  • invokespecial <method> (Invoke instance method; special handling): 调用实例方法,但需要特殊处理的情况,例如:
    • 调用父类方法 (super.method())
    • 调用私有方法
    • 调用构造器 (<init>)
  • invokestatic <method> (Invoke a class (static) method): 调用静态方法。
  • invokeinterface <interface method> (Invoke interface method): 调用接口方法。
  • invokedynamic <method> (Invoke dynamic method): 用于支持动态语言特性,例如 Lambda 表达式、动态代理等 (JDK 7 新增)。
  • ireturn, freturn, areturn, lreturn, dreturn (Return from method): 从方法返回,并将栈顶的 int, float, reference, long, double 类型值作为返回值返回。
  • return (Return void from method): 从 void 方法返回。

7. 控制流指令:

  • 条件跳转:
    • ifeq <branchoffset> (If int compare with zero is equal branch): 如果栈顶 int 型数值等于 0,则跳转。
    • ifne <branchoffset> (If int compare with zero is not equal branch): 如果栈顶 int 型数值不等于 0,则跳转。
    • iflt <branchoffset> (If int compare with zero is less than branch): 如果栈顶 int 型数值小于 0,则跳转。
    • ifge <branchoffset> (If int compare with zero is greater than or equal branch): 如果栈顶 int 型数值大于等于 0,则跳转。
    • ifgt <branchoffset> (If int compare with zero is greater than branch): 如果栈顶 int 型数值大于 0,则跳转。
    • ifle <branchoffset> (If int compare with zero is less than or equal branch): 如果栈顶 int 型数值小于等于 0,则跳转。
    • if_icmpeq <branchoffset> (If int compare equal branch): 如果栈顶两个 int 型数值相等,则跳转。
    • if_icmpne <branchoffset> (If int compare not equal branch): 如果栈顶两个 int 型数值不相等,则跳转。
    • if_icmplt <branchoffset> (If int compare less than branch): 如果栈顶第一个 int 型数值小于第二个,则跳转。
    • if_icmpge <branchoffset> (If int compare greater than or equal branch): 如果栈顶第一个 int 型数值大于等于第二个,则跳转。
    • if_icmpgt <branchoffset> (If int compare greater than branch): 如果栈顶第一个 int 型数值大于第二个,则跳转。
    • if_icmple <branchoffset> (If int compare less than or equal branch): 如果栈顶第一个 int 型数值小于等于第二个,则跳转。
    • ifnull <branchoffset> (If reference is null branch): 如果栈顶 reference 型数值为 null,则跳转。
    • ifnonnull <branchoffset> (If reference is not null branch): 如果栈顶 reference 型数值不为 null,则跳转。
  • 无条件跳转:
    • goto <branchoffset> (Branch always): 无条件跳转到指定偏移量。
    • goto_w <branchoffset> (Branch always wide): 宽偏移量版本 goto,用于跳转范围更大的情况。
  • tableswitch (Access jump table by index and jump): 用于 switch 语句 (当 case 值连续时)。
  • lookupswitch (Access jump table by key match and jump): 用于 switch 语句 (当 case 值不连续时)。

8. 异常处理指令:

  • athrow (Throw exception or error): 将栈顶的异常对象抛出。
  • checkcast <class> (Check whether object is of given type): 检查对象类型,如果类型不匹配,抛出 ClassCastException (也可以用于类型检查,不仅仅是异常处理)。
  • monitorenter (Enter monitor for object): 尝试获取对象的 monitor (锁),用于 synchronized 关键字的同步块的开始。
  • monitorexit (Exit monitor for object): 释放对象的 monitor (锁),用于 synchronized 关键字的同步块的结束。

类型缩写:

在指令助记符中,通常会使用一些类型缩写来表示操作的数据类型:

  • i: int
  • l: long
  • f: float
  • d: double
  • a: reference (对象引用)
  • b: byte
  • c: char
  • s: short

学习建议:

  • 无需记住所有指令: 字节码指令数量庞大,不需要全部记住,重点掌握常用的指令和它们的功能。
  • 结合实例学习: 通过查看 Java 代码编译后的字节码,结合具体的代码示例来学习指令,更容易理解。可以使用 javap -c <类名> 命令反编译 .class 文件查看字节码。
  • 关注指令类别: 按照功能类别 (操作数栈、局部变量表、运算、控制流等) 来学习,更容易形成体系。
  • 查阅 JVM 规范: 如果需要深入了解某个指令的细节,可以查阅 JVM 规范 (The Java Virtual Machine Specification)。
  • 理解 JVM 的基本执行模型: 基于栈的指令集、操作数栈、局部变量表等。
  • 分析 Java 代码的性能: 通过分析字节码,可以了解代码的执行效率,找出潜在的性能瓶颈。
  • 进行更深层次的 Java 调优: 理解字节码优化,可以编写更高效的 Java 代码。
  • 深入理解 Java 语言特性: 例如,多态、异常处理、同步机制等在字节码层面的实现。
从零到一:手把手教你用海康VisionMaster完成第一个字符识别项目(附完整流程与避坑点) 本文详细介绍了如何使用海康VisionMaster完成首个字符识别项目,涵盖从环境搭建、图像预处理到系统集成的完整流程。特别分享了Blob分析配置、字符识别优化等实战技巧,帮助开发者避开常见陷阱,快速掌握VisionMaster的基本操作,提升工业自动化场景下的字符识别效率。 阅读详情

相关推荐

基于Stigmergy的团队LLM wiki协作机制与FastAPI工程实践

大语言模型驱动的知识管理正在改变个人笔记与团队文档的维护方式,但当多人共同维护一个维基时,如何避免版本覆盖、上下文丢失和幻觉污染成为核心挑战。Stigmergy这一源自生物学的协作机制提供了新思路:通过共享环境中的痕迹(如评论、标记、修订历史)实现异步协作,无需实时沟通或中心协调者。本文将原理落地为可工程化的系统,设计Page、Revision、Trace三大实体,并结合向量索引与LLM审查流程,最终用FastAPI与SQLite搭建一个最小可运行原型。从白蚁筑巢到团队知识库,Stigmergy让每个参与者

weixin_34174322的博客 364

字节码指令

一、概述 字节码对于jvm相当于机器语音对一计算机,属于基本指令。 字节码由一个字节长度的代表着某种含义的数字(操作码,Opcode),以及跟随其后的零至多个代表操作所需的参数(操作数,Operands)而构成。由于JVM采用的是操作数栈而不是寄存器的结构,所以大多数指令不包含操作数,只有一个操作码。操作码最多不超过256. 1、执行模型 2、字节码与数据模型 操作指令一般都跟所操作的数据类型有关系,例如:iload就是加载一个int类型数据,同样fload加载一个float类型数据。i代表.

liming0025的专栏 1809

微信小程序地图开发避坑指南:腾讯地图API从配置到实战(附完整代码)

本文详细解析微信小程序中腾讯地图API的开发实践,从基础配置到高级功能实现,涵盖地图显示、地点搜索、路线规划等核心功能,并提供完整代码示例和常见问题解决方案,帮助开发者高效避坑。特别针对JavaScript SDK和map组件的使用进行了深度优化指导。

weixin_33725722的博客 486

十七、字节码指令

一、字节码指令概述 1、概述 1、Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行命令。 2、Java虚拟机的指令由1个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的0至多个代表此操作所需参数(称为操作数,Operand)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码,指令惨数都存放在操作数栈中。 3、字节码指令集可算是一种具有鲜明特点、优势和劣势均很突出的指令集架构,由于限制了Java虚拟机

余笙的博客 2926

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 445

基于MATLAB的数字滤波器之低通滤波器

本文首先介绍了数字低通滤波器的概念和原理,其次论述了低通滤波器的技术指标和设计步骤,最后给出了数字低通滤波器应用于信号去噪的MATLAB代码。

总结论文中的算法并给出论文的复现代码 3万+

Java字节码指令

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的0至多个代表此操作所需的参数(称为操作数,Operand)构成。

KEEP CODING 1421

4.Simulink基础建模操作——加减乘除运算

加减乘除运算

FPGA/MATLAB学习教程/源码/项目合作开发 9550

第二章:字节码指令集与解析案例

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

YZG ' BLOG 836

华为eNSP镜像包全集下载,包含CE6800、CE12800、NE系列等!

你好,这里是网络技术联盟站。昨天给大家介绍了win11、10下安装eNSP最新系列(1.3.00)并完美运行,附下载。从文章发布到发文前,一直有朋友想让瑞哥提供一下华为ENSP镜像包,今天安排!eNSP安装包、以及eNSP中所需要的镜像包(设备包)(CE、CX、NE40E、NE5000E、NE9000、USG)例如:导入一个USG设备包,eNSP中的USG5500和USG6000V都是可以启动的。如果你的报错“40”的话,那么打开Oracle VM VirtualBox这个虚拟机,删除对应报错的虚拟机,然后

网络技术联盟站 3万+

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

JVM - 字节码执行

此博客为炼数成金JVM教程第十一课 目录 javap 简单的字节码执行过程 常用的字节码 使用ASM生成java字节码 JIT及其相关参数 javap &nbsp;&nbsp;&nbsp;&nbsp; class 文件反编译工具 有如下代码: public class Calc{ public int calc(){ int a = 500; ...

cd19930508的博客 1213

4、分布式发电系统中用于改善电能质量的有源、无源和混合滤波器

本文探讨了分布式发电系统中,尤其是光伏(PV)系统运行过程中引入的电能质量问题,并分析了有源滤波器、无源滤波器及混合滤波器在改善电能质量方面的应用。文章详细介绍了光伏系统的建模、最大功率点跟踪(MPPT)技术,以及谐波、电压波动等技术问题,同时对各类滤波器的拓扑结构和控制方法进行了系统性总结。通过仿真实例比较了不同滤波器在减少谐波方面的效果,为实际工程应用提供了参考依据。

transformer2023的博客 90

Krakatau汇编器完整教程:手动编写Java字节码的简单方法

Krakatau是一款功能强大的Java汇编器、反汇编器和反编译器工具,它让开发者能够直接操作Java字节码,实现高级Java编程技巧。本教程将带你快速掌握使用Krakatau汇编器手动编写Java字节码的核心方法,即使你没有深入的JVM知识也能轻松上手。 ## 为什么选择Krakatau汇编器? Krakatau汇编器为开发者提供了直接编写Java字节码的能力,这在以下场景特别有用: - 学

gitblog_00823的博客 357

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java字节码揭秘——第二部分

转于:http://blog.youkuaiyun.com/BU_BetterYou/archive/2008/06/17/2556186.aspx     Java 字节码分类 JVM 字节码集合基本上是分为几个不同的大类的。我们不会逐一介绍字节码的操作符,我们讨论类别,然后着重拿出一些常用的操作符,其余的均可通过 JVM规范 来获取详情。   堆栈操作。 ...

jiasky的专栏 135

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《Java 100 天进阶之路》第44.3篇:JVM底层与字节码核心考点速查(2026版)

摘要:基础篇外挂第三弹!本文汇总 10 组 JVM 与字节码核心考点速查:JVM 内存结构(JDK 8+ 堆+栈+元空间)、堆 vs 栈、类加载生命周期(加载→验证→准备→解析→初始化)、双亲委派模型、GC 算法对比(复制/标记-清除/标记-整理)、JIT 编译器、字节码指令速查(javap -c 常用指令)、类加载器层次、finalize() 已弃用 → 用 try-with-resources、常见 JVM 参数。每组配一句话总结 + 结构图/表格,面试前直接速查!附10组速查PDF,评论区自取。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 321

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JVM篇之常用的字节码指令详解

JVM常见的字节码指令

2401_82924434的博客 777

JVM入节码指令

对应指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 将int型3推送至栈...

rui888的博客 377

JVM字节码指令集大全及其介绍

本节将会着重介绍一下JVM中的指令集、Java是如何跨平台的、JVM指令集参考手册等内容。 目录 Java是怎么跨平台的 平台无关的基石 JVM字节码指令介绍 字节码与数据类型 加载和存储指令 算术指令 类型转换指令 对象创建与访问指令 操作数栈管理指令 控制转移指令 方法调用和返回指令 异常处理指令 同步指令 JVM指令集大全 Java是怎么跨平台的 我们上计算...

没头脑遇到不高兴 1万+

【JVM】JVM指令手册

JVM指令助记符变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_操作数栈到变量:常数到操作数栈:加:iadd,ladd,fadd,dadd减:isub,lsub,fsub,dsub乘:imul,lmul,fmul,dmul除:idiv,ldiv,fdiv,ddiv余数:irem,lrem,frem,drem取负:ineg,lneg,fneg,dneg。

qq_43634261的博客 1847

JVM字节码指令

字节码指令 JVM字节码指令由一个字节长度,包含着特定含义的数值(操作码)以及跟随其后的零至多个操作所需参数(操作数)所构成;大多数字节码指令只有一个操作码,没有操作数,一般都是将操作所需参数存入操作数栈中; 字节码指令中有部分指令与数据类型相关联,比如iload/fload,将一个int/float类型的数据加载到操作数栈中; 字节码指令这块儿不算是虚拟机的重点,但是也有必要了解一些,下文会提到字节码指令的部分应用,以及部分指令;个人认为 把字节码指令之前的Class类文件学好比较重要,不过近

prince~home 1万+

JVM 指令重排

1 概念 指令重排序是JVM为了优化指令,提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度。编译器、处理器也遵循这样一个目标。注意是单线程。多线程的情况下指令重排序就会给程序员带来问题。 不同的指令间可能存在数据依赖。比如下面计算圆的面积的语句: double r = 2.3d;//(1) double pi =3.1415926; //(2)

一瓶绿茶三元钱 5066

JVM指令集及各指令的详细使用说明

一、JVM指令助记符 1)操作数栈 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_ 操作数栈到变量:istore,istore_,lstore,lstore_,fstore

JeamKing的专栏 5058

JVM指令集

跳转到class文件目录,使用 javap -c StringTest.class -> p.txt 通过命令将编译后的文件输出到p.txt文件 栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 int类型入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 long类型入栈 lconst_0 将long类型常量0压入栈 lconst_1 将long类型常量1压入栈 float类型入栈 fconst_0 将float类型

诗水人间 12万+

JVM字节码指令详解

在我们日常的Java开发中,我们的IDE开发工具会自动的通过编译器将Java代码编译成字节码文件,最后通过JVM来执行这些字节码文件。在这个过程中,一个重要的环节就是Java字节码。Java字节码是Java虚拟机(JVM)可以执行的指令集,它在一定程度上代表了Java的跨平台特性,因为不同的操作系统平台上的JVM都可以执行相同的Java字节码。因此,深入理解Java字节码对于掌握Java的运行机制是非常重要的。在本篇博文中,我将对JVM字节码的基础知识、指令类型、命名规则以及优化策略等方面进行详细的讲解。

日拱一卒无有尽,功不唐捐终入海 1378

JVM指令的速记

在学习的JVM的时候,最重要的是认识JVM的指令,JVM指令很多,为了方便记忆,可以根据前缀和功能进行分类: 例如:nop指令代表是一个空指令,JVM收到指令后,什么都不用做,等待下一个指令。 const把数据推至栈顶 const的范围从0x01–0x0f,负责把数据推送到栈顶。例如:iconst_0负责吧整型的0推送到栈顶。 fconst_0负责把float的0推送到栈顶。const可以分为以...

fuwei2020的博客 663
上一篇: JVM 中Minor GC、Major GC、Full GC 的区别?
下一篇: MySQL 哪些配置参数对 Spring Boot 应用的性能影响较大?
冰糖心书房
博客等级 码龄15年 6017粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值