首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JVM指令手册

栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int...位带符号整数压入栈 ldc 把常量池中的项压入栈 ldc_w 把常量池中的项压入栈(使用宽索引) ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引) 从栈中的局部变量中装载值的指令...类型的除法 frem 计算float类型除法的余数 drem 计算double类型除法的余数 fneg 将一个float类型的数值取反 dneg 将一个double类型的数值取反 对象和数组 对象操作指令...类型的数据 areturn 从方法中返回引用类型的数据 return 从方法中返回,返回值为void 线程同步 montiorenter 进入并获取对象监视器 monitorexit 释放并退出对象监视器 JVM...指令助记符 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_ 操作数栈到变量:istore,istore_

1.1K51

JVM 常用指令速查手册

昨天在群里闲聊技术,提到了反编译和指令码。对于反编译和 JVM 的几个指令我解释了它们的各自所包含的意义。有人就问我,我是如何记住的。...其实我也没记住这些指令,只不过,我总结了一个 JVM 常用指令速查手册,今天分享给大家!...JVM 基本指令 基本指令集是最常用的,总结如下: 指令 释义 iconst_1 int型常量值1进栈 bipush 将一个byte型常量值推送至栈顶 iload_1 第二个int型局部变量进栈,从0开始计数...实例初始化方法、私有方法 invokestatic 调用静态方法 invokeinterface 调用接口方法 new 创建一个对象,并且其引用进栈 newarray 创建一个基本类型数组,并且其引用进栈 JVM...注意:JVM并没有为null指派一个具体的值。

37310
您找到你想要的搜索结果了吗?
是的
没有找到

JVM 常用指令速查手册,建议收藏!

昨天在群里闲聊技术,提到了反编译和指令码。对于反编译和 JVM 的几个指令我解释了它们的各自所包含的意义。有人就问我,我是如何记住的。...其实我也没记住这些指令,只不过,我总结了一个 JVM 常用指令速查手册,今天分享给大家!...JVM 基本指令 基本指令集是最常用的,总结如下: 指令 释义 iconst_1 int型常量值1进栈 bipush 将一个byte型常量值推送至栈顶 iload_1 第二个int型局部变量进栈,从0开始计数...实例初始化方法、私有方法 invokestatic 调用静态方法 invokeinterface 调用接口方法 new 创建一个对象,并且其引用进栈 newarray 创建一个基本类型数组,并且其引用进栈 JVM...注意:JVM并没有为null指派一个具体的值。

91010

JVM|01基础指令

我们为什么要对jvm做优化?...博主使用的jdk版本为1.8 JVM的运行参数 在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。绝大部分的参数保持默认即可。...JVM在启动的时候会根据硬件和操作系统自动选择使用Server还是Client类型的 JVM。 32位操作系统 如果是Windows系统,不论硬件配置如何,都默认使用Client类型的JVM。...-Xmixed是混合模式,将解释模式与编译模式进行混合使用,由jvm自己决定,这是 jvm默认的模式,也是推荐使用的模式 实例: [root@hadoop101 ~]# java -showversion...-Xmx2048m:等价于-XX:MaxHeapSize,设置JVM最大堆内存为2048M。 -Xms512m:等价于-XX:InitialHeapSize,设置JVM初始堆内存为512M。

50020

jvm指令

跳转到class文件目录,使用 javap -c StringTest.class -> p.txt 1 命令将编译后的文件输出到p.txt文件 栈和局部变量操作 将常量压入栈的指令 aconst_null...位带符号整数压入栈 ldc 把常量池中的项压入栈 ldc_w 把常量池中的项压入栈(使用宽索引) ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引) 从栈中的局部变量中装载值的指令...类型的除法 frem 计算float类型除法的余数 drem 计算double类型除法的余数 fneg 将一个float类型的数值取反 dneg 将一个double类型的数值取反 对象和数组 对象操作指令...类型的数据 areturn 从方法中返回引用类型的数据 return 从方法中返回,返回值为void 线程同步 montiorenter 进入并获取对象监视器 monitorexit 释放并退出对象监视器 JVM...指令助记符 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_ 操作数栈到变量:istore,istore_

34820

JVM指令的速记

在学习的JVM的时候,最重要的是认识JVM指令JVM指令很多,为了方便记忆,可以根据前缀和功能进行分类: 例如:nop指令代表是一个空指令JVM收到指令后,什么都不用做,等待下一个指令。...而ldc指令对应的(索引值)参数为1个字节。 ---- load加载指令 load指令是加载把指定的本地变量推送的至栈顶,范围是0x15~0x3a。...dup2_x2:dup_x2 指令的双倍版本 swap:交换两个栈顶的数据,数值不能是long或者double类型 ---- 运算指令 JVM对于加减乘除和位运算都提供了不同的指令...---- 控制指令 JVM的控制指令是指有条件或无条件地修改PC寄存器的值,从而达到控制流程的目标 ,共分成3类: 条件分支undefined条件分支是在编程的时候使用的if和whiledai...类型值小于或者等于另外一个int类型值,则跳转 是否为空的时候跳转: - `ifnull` 为 null 时跳转 - `ifnonnull` 不为 null 时跳转复合条件 复合条件是switch关键字,jvm

1K10

jvm指令重排_java指令重排

引言:在Java中看似顺序的代码在JVM中,可能会出现编译器或者CPU对这些操作指令进行了重新排序;在特定情况下,指令重排将会给我们的程序带来不确定的结果….. 1....什么是指令重排? 在计算机执行指令的顺序在经过程序编译器编译之后形成的指令序列,一般而言,这个指令序列是会输出确定的结果;以确保每一次的执行都有确定的结果。...数据依赖性 主要指不同的程序指令之间的顺序是不允许进行交互的,即可称这些程序指令之间存在数据依赖性。...指令重排的原因分析 主要还是编译器以及CPU为了优化代码或者执行的效率而执行的优化操作;应用条件是单线程场景下,对于并发多线程场景下,指令重排会产生不确定的执行效果。 6....可见性 这里提到的可见性是指前一条程序指令的执行结果,可以被后一条指令读到或者看到,称之为可见性。反之为不可见性。这里主要描述的是在多线程环境下,指令语句之间对于结果信息的读取即时性。

27920

性能优化-JVM常用指令

JVM常用指令 ~~~shell 指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶...0xa9 ret 返回至本地变量指定的index的指令位置(一般与jsr,jsr_w联合使用) 0xaa tableswitch 用于switch条件跳转,case值连续(可变长度指令) 0xab...lookupswitch 用于switch条件跳转,case值不连续(可变长度指令) 0xac ireturn 从当前方法返回int 0xad lreturn 从当前方法返回long 0xae...用于同步方法或同步块 0xc3 monitorexit 释放对象的锁,用于同步方法或同步块 0xc4 wide 0xc5 multianewarray 创建指定类型和指定维度的多维数组(执行该指令时...ifnull 为null时跳转 0xc7 ifnonnull 不为null时跳转 0xc8 goto_w 无条件跳转(宽索引) 0xc9 jsr_w 跳转至指定32位offset位置,并将jsr_w下一条指令地址压入栈顶

37230

JVM 字节码指令

字节码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将 null 推送至栈顶 0x02 iconst_m1 将 int 型 -1 推送至栈顶 0x03 iconst...0x5e dup2_x2 dup_x2 指令的双倍版本 0x5f swap 将栈最顶端的两个数值互换(数值不能是 long 或 double 类型) 0x60 iadd 将栈顶两 int 型数值相加并将结果压入栈顶...0xa9 ret 返回至局部变量指定的 index 的指令位置(一般与 jsr 或 jsr_w 联合使用) 0xaa tableswitch 用于 switch 条件跳转,case 值连续(可变长度指令...) 0xab lookupswitch 用于 switch 条件跳转,case 值不连续(可变长度指令) 0xac ireturn 从当前方法返回 int 0xad lreturn 从当前方法返回 long...invokespecial 调用超类构造方法,实例初始化方法,私有方法 0xb8 invokestatic 调用静态方法 0xb9 invokeinterface 调用接口方法 0xba -- 无此指令

1.7K20

JVM进阶之路】十二:字节码指令

在前面的 【JVM进阶之路】三:探究虚拟机对象 里,提到了对象的初始化过程,对象初始化用的是new指令——这就是字节码指令。...在【JVM进阶之路】十一:Class文件结构 中已经学习了JVM 字节码是JVM能直接识别的语言,了解了字节码文件的文件结构。接下来,我们进一步学习字节码的相关指令。...JVM主要支持byte、short、int、long、float、double、char、reference集中数据类型,每种数据类型的操作码分别以不同的字母开头,例如iadd表示int类型的相加指令码...2、运算指令 算术指令用于对两个操作数栈上的值进行某种特定运算,并把结果重新存入到操作栈顶。大体上运算指令可以分为两种:对整型数据进行运算的指令与对浮点型数据进行运算的指令。...18: monitorexit 19: aload_3 20: athrow 21: return ---- 参考 【1】:《深入理解Java虚拟机:JVM

83730

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

一、JVM指令助记符 1)操作数栈 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_ 操作数栈到变量...invokestatic 方法返回:ireturn,lreturn,freturn,dreturn,areturn,return 异常:athrow finally关键字的实现使用:jsr,jsr_w,ret 二、JVM...指令指令码 助记符    说明   0x00 nop      什么都不做   0x01 aconst_null 将null推送至栈顶   0x02 iconst_m1   将int型-...   0xa9 ret      返回至本地变量指定的index的指令位置(一般与jsr, jsr_w联合使用)   0xaa tableswitch    用于switch条件跳转,case值连续...(可变长度指令)   0xab lookupswitch   用于switch条件跳转,case值不连续(可变长度指令)   0xac ireturn    从当前方法返回int 0xad lreturn

2.1K90

【面试题精讲】JVM-clinit指令

为什么需要 clinit 指令? clinit 指令 的存在是为了保证 Java 类的静态变量和静态代码块在类加载时能够按照代码顺序被正确初始化。...3. clinit 指令的实现原理? 在 Java 类加载的过程中,clinit 指令 是在类的准备阶段和初始化阶段之间执行的。在准备阶段,虚拟机为类的静态变量分配内存,并初始化为默认值。...5. clinit 指令的优点 clinit 指令 的主要优点是它保证了 Java 类的静态变量和静态代码块在类加载时能够按照代码顺序被正确初始化。...6. clinit 指令的缺点 clinit 指令 的一个潜在缺点是它可能会导致类加载的过程变慢,特别是当类中有大量的静态变量或静态代码块时。...7. clinit 指令的使用注意事项 在使用clinit 指令 时,需要注意以下几点: 静态变量和静态代码块的初始化顺序与它们在源代码中的顺序一致。

13610

jvm之字节码指令集解读(上)

概述 Java字节码指令集是一组计算机指令,用于在Java虚拟机上执行Java程序。...还有另外一些指令,如无条件跳转指令goto则是与数据类型无关的。 大部分的指令都没有支持整数类型byte、char和short,甚至没有任何指令支持boolean类型。...指令分析 由于完全介绍和学习这些指令需要花费大量时间。为了让大家能够更快地熟悉和了解这些基本指令,这里将JVM中的字节码指令集按用途大致分成9类。...加载与存储指令 算术指令 类型转换指令 对象的创建与访问指令 方法调用与返回指令 操作数栈管理指令 比较控制指令 异常处理指令 同步控制指令 (说在前面)在做值相关操作时: 一个指令,可以从局部变量表、...具体来说便是:执行每一条指令之前,Java虚拟机要求该指令的操作数已被压入操作数栈中。在执行指令时,Java虚拟机会将该指令所需的操作数弹出,并且将指令的结果重新压入栈中。

28450

JVM学习第三天(JVM的执行子系统)之字节码指令

大部分的指令都没有支持整数类型byte、char和short,甚至没有任何指令支持boolean类型。...请熟悉并掌握常见指令即可。 加载和存储指令 用于将数据在栈帧中的局部变量表和操作数栈之间来回传输,这类指令包括如下内容。...控制转移指令 控制转移指令可以让Java虚拟机有条件或无条件地从指定的位置指令而不是控制转移指令的下一条指令继续执行程序,从概念模型上理解,可以认为控制转移指令就是在有条件或无条件地修改PC寄存器的值。...异常处理指令 在Java程序中显式抛出异常的操作(throw语句)都由athrow指令来实现 同步指令 有monitorenter和monitorexit两条指令来支持synchronized关键字的语义...作者:彼岸舞 时间:2020\03\31 内容关于:JVM 本文部分来源于网络,只做技术分享,一概不负任何责任

51930
领券