随着互联网行业的发展,内卷越来越严重,已经不是2018年左右,只会增删改查、简单的Ctrl+V、Ctrl+C那么简单了,对程序员的要求越来越高。

给大家介绍一些常用java指令集:
受限于java虚拟机操作码的长度为1个字节(0-255),意味着操作码总数不能超过256条
1存储指令
astore:把 引用类型变量 存储到 局部变量表中
istore:把 变量 存储到 局部变量表中
2获取指令
aload:从局部变量表中取数据 放到 操作数栈中
aload: 从局部变量表中取出 引用 放到 操作数栈中
bipush:把变量 放到 操作数栈中 (接收8位)
sipush:把变量 放到 操作数栈中 (接收16位)
lconst:把 long类型的 常量 放到 操作数栈中
iconst:把 -1,1,2,3,4,5 常量 放到 操作数栈中,如果i不在 -1 到 5之间,需要使用bipush、sipush等指令了
3逻辑指令
ineg:取反指令 int类型
fneg:取反指令 float类型
4算术指令
ddiv:除,如果没有明确的结果则返回NaN,无穷大 Infinity
iadd:加
isub:减
imul:乘
iinc:自增指令
5对象操作指令
new 创建一个新对象
getfield 从对象中获取字段
putfield 设置对象中字段的值
getstatic 从类中获取静态字段
putstatic 设置类中静态字段的值 数组操作指令
newarray 分配数据成员类型为基本上数据类型的新数组
anewarray 分配数据成员类型为引用类型的新数组
arraylength 获取数组长度
multianewarray 分配新的多维数组
6数组操作指令
把一个数组元素加载到操作数栈的指令:baload、caload、saload、iaload、laload、faload、daload、aaload
将一个操作数栈的值存储到数组元素中的指令:bastore、castore、sastore、iastore、lastore、fastore、dastore、aastore
Demo:
7操作数栈管理指令
将一个或两个元素从栈顶弹出,并且直接废弃:pop,pop2复制栈顶一个或两个数值并将复制值或双份的复制值重新压入栈顶:dup,dup2,dup_x1,dup2_×1,dup_×2,dup2_×2
含义:dup_x1:1+1=2,即栈顶2个slot下面
将栈最顶端的两个Slot数值位置交换:swap。Java虚拟机没有提供交换两个64位数据类型(long、double)数值的指令。指令nop,是一个非常特殊的指令,它的字节码为0x00。和汇编语言中的nop一样,它表示什么都不做。这条指令一般可用于调试、占位等8流程控制指令
比较指令
lcmp 比较long类型值
fcmpl 比较float类型值(当遇到NaN时,返回-1)
fcmpg 比较float类型值(当遇到NaN时,返回1)
dcmpl 比较double类型值(当遇到NaN时,返回-1)
dcmpg 比较double类型值(当遇到NaN时,返回1)
条件跳转指令:和0进行对比
ifeq 如果等于0,则跳转
ifne 如果不等于0,则跳转
iflt 如果小于0,则跳转
ifge 如果大于等于0,则跳转
ifgt 如果大于0,则跳转
ifle 如果小于等于0,则跳转
比较条件分支指令
if_icmpeq 如果两个int值相等,则跳转
if_icmpne 如果两个int类型值不相等,则跳转
if_icmplt 如果一个int类型值小于另外一个int类型值,则跳转
if_icmpge 如果一个int类型值大于或者等于另外一个int类型值,则跳转
if_icmpgt 如果一个int类型值大于另外一个int类型值,则跳转
if_icmple 如果一个int类型值小于或者等于另外一个int类型值,则跳转
ifnull 如果等于null,则跳转
ifnonnull 如果不等于null,则跳转
if_acmpeq 如果两个对象引用相等,则跳转
if_acmpne 如果两个对象引用不相等,则跳转
无条件跳转指令
goto 无条件跳转
goto_w 无条件跳转(宽索引)
更多指令集,请参考官网地址:Chapter�6.燭he Java Virtual Machine Instruction Set
https://docs.oracle.com/javase/specs/jvms/se16/html/jvms-6.html


还没有评论,来说两句吧...