• JVM指令集


    概述

    JVM,Java Virtual Machine,Java虚拟机器,作为一台独立的机器,一般包括独立的指令集、独立的存储体系以及适合机器自身的运算方式,本章节主要是描述JVM指令的功能与作用。

    JVM的每个指令的格式是【指令 操作数1操作数2…】,其中,JVM为每个指令分配一个opcode,即操作码,使用16进制格式表示,每个操作数都对类型进行约束,JVM在运行时,执行类字节码对应指令的过程中,发生错误时都会抛出VirtualMachineError的异常信息,该异常对应的子类如下所示:

    InternalError:

    JVM内部错误,包括JVM执行软件的过程中发生错误、JVM底层的主机软硬件系统发生错误

    OutOfMemoryError:

    JVM堆内存溢出错误,JVM在运行过程中所需要占用的总堆内存空间大小超出JVM虚拟内存或者物理内存的总空间大小,内存管理器不能为新建的对象申请足够的内存空间大小

    StackOverflowError:

    JVM栈内存溢出错误,JVM在运行过程中一个线程所需要占用的栈内存空间大小超出事先设定的总空间大小,一般情况下,因为程序无限的递归调用而发生程序执行的错误

    UnknownError:

    JVM未知错误,JVM在运行过程中发生错误,但是JVM未能报告实际的异常或者错误

    指令集(部分)

    指令名称:aload

    功能描述:根据数组索引位从数组中加载引用

    指令名称:astore

    功能描述:将引用存入到数组对应的索引位

    指令名称:aload_

    功能描述:加载本地变量到操作数栈中,其中,n表示从0开始的正整数,表示第n个本地变量

    指令名称:anewarray

    功能描述:创建一个指定大小的引用数组

    指令名称:areturn

    功能描述:从方法中返回一个引用

    指令名称:arraylength

    功能描述:获取一个数组的引用

    指令名称:astore

    功能描述:将一个引用存储到本地变量

    指令名称:astore_

    功能描述:将一个引用存储到本地变量,其中,n表示从0开始的正整数,表示第n个本地变量

    指令名称:athrow

    功能描述:抛出一个异常或者错误

    指令名称:baload

    功能描述:从数组中加载一个字节类型或者布尔类型

    指令名称:bastore

    功能描述:存储一个字节类型或者布尔类型到数组指定的索引位

    指令名称:bipush

    功能描述:将一个字节类型压入到操作数栈中

    指令名称:caload

    功能描述:从字符数组中加载一个字符

    指令名称:castore

    功能描述:将一个字符存储到字符数组中

    指令名称:checkcast

    功能描述:检查一个引用是否是给定的类型,其中,引用类型包括类、数组或者接口

    指令名称:d2f

    功能描述:将一个double类型转换成float类型

    指令名称:d2i

    功能描述:将一个double类型转换成int类型

    指令名称:d2l

    功能描述:将一个double类型转换成long类型

    指令名称:dadd

    功能描述:将两个double类型相加

    指令名称:daload

    功能描述:从double类型数组中加载一个double类型

    指令名称:dastore

    功能描述:将一个double类型存储到double类型的数组中

    指令名称:dcmp

    功能描述:比较两个double类型的大小,其中,op是操作符,g表示大于,l表示小于

    指令名称:dconst_

    功能描述:将一个double类型的常量压入操作数栈,其中,d的值包括0或者1,表示第几个常量

    指令名称:ddiv

    功能描述:两个double类型相除

    指令名称:dload

    功能描述:加载一个double类型的本地变量

    指令名称:dload_

    功能描述:加载一个double类型的本地变量,其中,n表示从0开始的正整数,表示第n个本地变量

    指令名称:dmul

    功能描述:将两个double类型相乘

    指令名称:dneg

    功能描述:对一个double类型取负值

    指令名称:drem

    功能描述:对一个double类型取余

    指令名称:dreturn

    功能描述:在一个方法中返回一个double类型

    指令名称:dstore

    功能描述:将一个double类型存储到本地变量中

    指令名称:dstore_

    功能描述:将一个double类型存储到本地变量中,其中,n表示从0开始的正整数,表示第n个本地变量

    指令名称:dsub

    功能描述:将两个double类型相减

    指令名称:dup

    功能描述:复制一个操作数栈顶的操作数类型

    指令名称:dup_x1

    功能描述:复制一个操作数栈顶的操作数类型,并将新复制的操作数类型插入到操作数栈顶以下的索引位2(从0开始)

    指令名称:dup_x2

    功能描述:复制一个操作数栈顶的操作数类型,并将新复制的操作数类型插入到操作数栈顶以下的索引位2或者3(从0开始)

    指令集分类

    Constants 常量类

    00 (0x00) nop

    01 (0x01) aconst_null

    02 (0x02) iconst_m1

    03 (0x03) iconst_0

    04 (0x04) iconst_1

    05 (0x05) iconst_2

    06 (0x06) iconst_3

    07 (0x07) iconst_4

    08 (0x08) iconst_5

    09 (0x09) lconst_0

    10 (0x0a) lconst_1

    11 (0x0b) fconst_0

    12 (0x0c) fconst_1

    13 (0x0d) fconst_2

    14 (0x0e) dconst_0

    15 (0x0f) dconst_1

    16 (0x10) bipush

    17 (0x11) sipush

    18 (0x12) ldc

    19 (0x13) ldc_w

    20 (0x14) ldc2_w

    Loads 加载类

    21 (0x15) iload

    22 (0x16) lload

    23 (0x17) fload

    24 (0x18) dload

    25 (0x19) aload

    26 (0x1a) iload_0

    27 (0x1b) iload_1

    28 (0x1c) iload_2

    29 (0x1d) iload_3

    30 (0x1e) lload_0

    31 (0x1f) lload_1

    32 (0x20) lload_2

    33 (0x21) lload_3

    34 (0x22) fload_0

    35 (0x23) fload_1

    36 (0x24) fload_2

    37 (0x25) fload_3

    38 (0x26) dload_0

    39 (0x27) dload_1

    40 (0x28) dload_2

    41 (0x29) dload_3

    42 (0x2a) aload_0

    43 (0x2b) aload_1

    44 (0x2c) aload_2

    45 (0x2d) aload_3

    46 (0x2e) iaload

    47 (0x2f) laload

    48 (0x30) faload

    49 (0x31) daload

    50 (0x32) aaload

    51 (0x33) baload

    52 (0x34) caload

    53 (0x35) saload

    Stores 存储类

    54 (0x36) istore

    55 (0x37) lstore

    56 (0x38) fstore

    57 (0x39) dstore

    58 (0x3a) astore

    59 (0x3b) istore_0

    60 (0x3c) istore_1

    61 (0x3d) istore_2

    62 (0x3e) istore_3

    63 (0x3f) lstore_0

    64 (0x40) lstore_1

    65 (0x41) lstore_2

    66 (0x42) lstore_3

    67 (0x43) fstore_0

    68 (0x44) fstore_1

    69 (0x45) fstore_2

    70 (0x46) fstore_3

    71 (0x47) dstore_0

    72 (0x48) dstore_1

    73 (0x49) dstore_2

    74 (0x4a) dstore_3

    75 (0x4b) astore_0

    76 (0x4c) astore_1

    77 (0x4d) astore_2

    78 (0x4e) astore_3

    79 (0x4f) iastore

    80 (0x50) lastore

    81 (0x51) fastore

    82 (0x52) dastore

    83 (0x53) aastore

    84 (0x54) bastore

    85 (0x55) castore

    86 (0x56) sastore

    Stack 栈操作类

    87 (0x57) pop

    88 (0x58) pop2

    89 (0x59) dup

    90 (0x5a) dup_x1

    91 (0x5b) dup_x2

    92 (0x5c) dup2

    93 (0x5d) dup2_x1

    94 (0x5e) dup2_x2

    95 (0x5f) swap

    Math 运算类

    96 (0x60) iadd

    97 (0x61) ladd

    98 (0x62) fadd

    99 (0x63) dadd

    100 (0x64) isub

    101 (0x65) lsub

    102 (0x66) fsub

    103 (0x67) dsub

    104 (0x68) imul

    105 (0x69) lmul

    106 (0x6a) fmul

    107 (0x6b) dmul

    108 (0x6c) idiv

    109 (0x6d) ldiv

    110 (0x6e) fdiv

    111 (0x6f) ddiv

    112 (0x70) irem

    113 (0x71) lrem

    114 (0x72) frem

    115 (0x73) drem

    116 (0x74) ineg

    117 (0x75) lneg

    118 (0x76) fneg

    119 (0x77) dneg

    120 (0x78) ishl

    121 (0x79) lshl

    122 (0x7a) ishr

    123 (0x7b) lshr

    124 (0x7c) iushr

    125 (0x7d) lushr

    126 (0x7e) iand

    127 (0x7f) land

    128 (0x80) ior

    129 (0x81) lor

    130 (0x82) ixor

    131 (0x83) lxor

    132 (0x84) iinc

    Conversions 转换类

    133 (0x85) i2l

    134 (0x86) i2f

    135 (0x87) i2d

    136 (0x88) l2i

    137 (0x89) l2f

    138 (0x8a) l2d

    139 (0x8b) f2i

    140 (0x8c) f2l

    141 (0x8d) f2d

    142 (0x8e) d2i

    143 (0x8f) d2l

    144 (0x90) d2f

    145 (0x91) i2b

    146 (0x92) i2c

    147 (0x93) i2s

    Comparisons 比较类

    148 (0x94) lcmp

    149 (0x95) fcmpl

    150 (0x96) fcmpg

    151 (0x97) dcmpl

    152 (0x98) dcmpg

    153 (0x99) ifeq

    154 (0x9a) ifne

    155 (0x9b) iflt

    156 (0x9c) ifge

    157 (0x9d) ifgt

    158 (0x9e) ifle

    159 (0x9f) if_icmpeq

    160 (0xa0) if_icmpne

    161 (0xa1) if_icmplt

    162 (0xa2) if_icmpge

    163 (0xa3) if_icmpgt

    164 (0xa4) if_icmple

    165 (0xa5) if_acmpeq

    166 (0xa6) if_acmpne

    Control 控制类

    167 (0xa7) goto

    168 (0xa8) jsr

    169 (0xa9) ret

    170 (0xaa) tableswitch

    171 (0xab) lookupswitch

    172 (0xac) ireturn

    173 (0xad) lreturn

    174 (0xae) freturn

    175 (0xaf) dreturn

    176 (0xb0) areturn

    177 (0xb1) return

    References 引用类

    178 (0xb2) getstatic

    179 (0xb3) putstatic

    180 (0xb4) getfield

    181 (0xb5) putfield

    182 (0xb6) invokevirtual

    183 (0xb7) invokespecial

    184 (0xb8) invokestatic

    185 (0xb9) invokeinterface

    186 (0xba) invokedynamic

    187 (0xbb) new

    188 (0xbc) newarray

    189 (0xbd) anewarray

    190 (0xbe) arraylength

    191 (0xbf) athrow

    192 (0xc0) checkcast

    193 (0xc1) instanceof

    194 (0xc2) monitorenter

    195 (0xc3) monitorexit

    Extended 扩展类

    196 (0xc4) wide

    197 (0xc5) multianewarray

    198 (0xc6) ifnull

    199 (0xc7) ifnonnull

    200 (0xc8) goto_w

    201 (0xc9) jsr_w

    Reserved 预留类

    202 (0xca) breakpoint

    254 (0xfe) impdep1

    255 (0xff) impdep2

  • 相关阅读:
    python读取.xls文件,绘制钻头外径磨损图
    《PyTorch深度学习实践》第十三课(循环神经网络RNN高级版)
    Python Selenium 浏览器打印预览
    python --- 变量、函数、类的命名规范
    Eclipse Indigo运行Struts2的几个问题
    自助式数据分析平台:JVS智能BI功能介绍(一)数据源
    LuatOS-SOC接口文档(air780E)-- fs - 文件系统额外操作
    Fiddler抓取安卓手机上网数据2-2
    TCP 可靠性的关键机制 —— 确认应答机制 (ACK)
    「Python实用秘技06」逐行监听Python程序的内存消耗
  • 原文地址:https://blog.csdn.net/uesowys/article/details/132730300