JVM指令集
指令集,其实就是一系列指令的集合。例如我们需要给一个局部变量赋予1这个值,即这个动作:int a = 1; 在我们看来,这很简单,但对于机器来说需要很多个动作。所以Java虚拟机指令集就是将这些常用的动作集中起来,定义成一系列指令,方便我么能使用。
Java语言和虚拟机规范:https://docs.oracle.com/javase/specs/index.html
反编译:javap -c .class文件
编译后如下图:

JVM指令集(指令码、助记符、功能描述)
|
指令码 |
助记符 |
功能描述 |
||||||||||||||
|
0x00 |
nop |
无操作 |
||||||||||||||
|
0x01 |
aconst_null |
指令格式: aconst_null 功能描述: null进栈
注意:JVM并没有为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进栈 |
||||||||||||||
|
0x07 |
iconst_4 |
int型常量值4进栈 |
||||||||||||||
|
0x08 |
iconst_5 |
int型常量值5进栈 |
||||||||||||||
|
0x09 |
lconst_0 |
long型常量值0进栈 |
||||||||||||||
|
0x0A |
lconst_1 |
long型常量值1进栈 |
||||||||||||||
|
0x0B |
fconst_0 |
float型常量值0进栈 |
||||||||||||||
|
0x0C |
fconst_1 |
float型常量值1进栈 |
||||||||||||||
|
0x0D |
fconst_2 |
float型常量值2进栈 |
||||||||||||||
|
0x0E |
dconst_0 |
double型常量值0进栈 |
||||||||||||||
|
0x0F |
dconst_1 |
double型常量值1进栈 |
||||||||||||||
|
0x10 |
bipush |
将一个byte型常量值推送至栈顶 |
||||||||||||||
|
0x11 |
sipush |
将一个short型常量值推送至栈顶 |
||||||||||||||
|
0x12 |
ldc |
将int、float或String型常量值从常量池中推送至栈顶 |
||||||||||||||
|
0x13 |
ldc_w |
将int、float或String型常量值从常量池中推送至栈顶(宽索引) |
||||||||||||||
|
0x14 |
ldc2_w |
将long或double型常量值从常量池中推送至栈顶(宽索引) |
||||||||||||||
|
0x15 |
iload |
指定的int型局部变量进栈 |
||||||||||||||
|
0x16 |
lload |
指定的long型局部变量进栈 |
||||||||||||||
|
0x17 |
fload |
指定的float型局部变量进栈 |
||||||||||||||
|
0x18 |
dload |
指定的double型局部变量进栈 |
||||||||||||||
|
0x19 |
aload |
指令格式: aload index 功能描述: 当前frame的局部变量数组中下标为index的引用型局部变量进栈
index : 无符号一byte整型。和wide指令联用, 可以使index为两byte |
||||||||||||||
|
0x1A |
iload_0 |
第一个int型局部变量进栈 |
||||||||||||||
|
0x1B |
iload_1 |
第二个int型局部变量进栈 |
||||||||||||||
|
0x1C |
iload_2 |
第三个int型局部变量进栈 |
||||||||||||||
|
0x1D |
iload_3 |
第四个int型局部变量进栈 |
||||||||||||||
|
0x1E |
lload_0 |
第一个long型局部变量进栈 |
||||||||||||||
|
0x1F |
lload_1 |
第二个long型局部变量进栈 |
||||||||||||||
|
0x20 |
lload_2 |
第三个long型局部变量进栈 |
||||||||||||||
|
0x21 |
lload_3 |
第四个long型局部变量进栈 |
||||||||||||||
|
0x22 |
fload_0 |
第一个float型局部变量进栈 |
||||||||||||||
|
0x23 |
fload_1 |
第二个float型局部变量进栈 |
||||||||||||||
|
0x24 |
fload_2 |
第三个float型局部变量进栈 |
||||||||||||||
|
0x25 |
fload_3 |
第四个float型局部变量进栈 |
||||||||||||||
|
0x26 |
dload_0 |
第一个double型局部变量进栈 |
||||||||||||||
|
0x27 |
dload_1 |
第二个double型局部变量进栈 |
||||||||||||||
|
0x28 |
dload_2 |
第三个double型局部变量进栈 |
||||||||||||||
|
0x29 |
dload_3 |
第四个double型局部变量进栈 |
||||||||||||||
|
0x2A |
aload_0 |
指令格式:aload_0 该指令的行为类似于aload指令index为0的情况。 |
||||||||||||||
|
0x2B |
aload_1 |
同上 |
||||||||||||||
|
0x2C |
aload_2 |
同上 |
||||||||||||||
|
0x2D |
aload_3 |
同上 |
||||||||||||||
|
0x2E |
iaload |
指定的int型数组的指定下标处的值进栈 |
||||||||||||||
|
0x2F |
laload |
指定的long型数组的指定下标处的值进栈 |
||||||||||||||
|
0x30 |
faload |
指定的float型数组的指定下标处的值进栈 |
||||||||||||||
|
0x31 |
daload |
指定的double型数组的指定下标处的值进栈 |
||||||||||||||
|
0x32 |
aaload |
指令格式: aaload 功能描述: 栈顶的数组下标(index)、数组引用(arrayref)出栈,并根据这两个数值取出对应的数组元素值(value)进栈。 抛出异常: 如果arrayref的值为null,会抛出NullPointerException。如果index造成数组越界,会抛出ArrayIndexOutOfBoundsException。
index: int类型 arrayref: 数组的引用 |
||||||||||||||
|
0x33 |
baload |
指定的boolean或byte型数组的指定下标处的值进栈 |
||||||||||||||
|
0x34 |
caload |
指定的char型数组的指定下标处的值进栈 |
||||||||||||||
|
0x35 |
saload |
指定的short型数组的指定下标处的值进栈 |
||||||||||||||
|
0x36 |
istore |
将栈顶int型数值存入指定的局部变量 |
||||||||||||||
|
0x37 |
lstore |
将栈顶long型数值存入指定的局部变量 |
||||||||||||||
|
0x38 |
fstore |
将栈顶float型数值存入指定的局部变量 |
||||||||||||||
|
0x39 |
dstore |
将栈顶double型数值存入指定的局部变量 |
||||||||||||||
|
0x3A |
astore |
指令格式: astore index 功能描述: 将栈顶数值(objectref)存入当前frame的局部变量数组中指定下标(index)处的变量中,栈顶数值出栈。
index : 无符号一byte整数。该指令和wide联用,index可以为无符号两byte整数 |
||||||||||||||
|
0x3B |
istore_0 |
将栈顶int型数值存入第一个局部变量 |
||||||||||||||
|
0x3C |
istore_1 |
将栈顶int型数值存入第二个局部变量 |
||||||||||||||
|
0x3D |
istore_2 |
将栈顶int型数值存入第三个局部变量 |
||||||||||||||
|
0x3E |
istore_3 |
将栈顶int型数值存入第四个局部变量 |
||||||||||||||
|
0x3F |
lstore_0 |
将栈顶long型数值存入第一个局部变量 |
||||||||||||||
|
0x40 |
lstore_1 |
将栈顶long型数值存入第二个局部变量 |
||||||||||||||
|
0x41 |
lstore_2 |
将栈顶long型数值存入第三个局部变量 |
||||||||||||||
|
0x42 |
lstore_3 |
将栈顶long型数值存入第四个局部变量 |
||||||||||||||
|
0x43 |
fstore_0 |
将栈顶float型数值存入第一个局部变量 |
||||||||||||||
|
0x44 |
fstore_1 |
将栈顶float型数值存入第二个局部变量 |
||||||||||||||
|
0x45 |
fstore_2 |
将栈顶float型数值存入第三个局部变量 |
||||||||||||||
|
0x46 |
fstore_3 |
将栈顶float型数值存入第四个局部变量 |
||||||||||||||
|
0x47 |
dstore_0 |
将栈顶double型数值存入第一个局部变量 |
||||||||||||||
|
0x48 |
dstore_1 |
将栈顶double型数值存入第二个局部变量 |
||||||||||||||
|
0x49 |
dstore_2 |
将栈顶double型数值存入第三个局部变量 |
||||||||||||||
|
0x4A |
dstore_3 |
将栈顶double型数值存入第四个局部变量 |
||||||||||||||
|
0x4B |
astore_0 |
指令格式: astore_0 功能描述: 该指令的行为类似于astore指令index为0的情况。 |
||||||||||||||
|
0x4C |
astore_1 |
同上 |
||||||||||||||
|
0x4D |
astore_2 |
同上 |
||||||||||||||
|
0x4E |
astore_3 |
同上 |
||||||||||||||
|
0x4F |
iastore |
将栈顶int型数值存入指定数组的指定下标处 |
||||||||||||||
|
0x50 |
lastore |
将栈顶long型数值存入指定数组的指定下标处 |
||||||||||||||
|
0x51 |
fastore |
将栈顶float型数值存入指定数组的指定下标处 |
||||||||||||||
|
0x52 |
dastore |
将栈顶double型数值存入指定数组的指定下标处 |
||||||||||||||
|
0x53 |
aastore |
指令格式: aastore 功能描述: 根据栈顶的引用型数值(value)、数组下标(index)、数组引用(arrayref)出栈,将数值存入对应的数组元素中 抛出异常: 如果value的类型和arrayref所引用的数组的元素类型不兼容,会抛出抛出ArrayStoreException。如果index造成数组越界,会抛出ArrayIndexOutOfBoundsException。 如果arrayref值为null,会抛出NullPointerException。
arrayref : 必须是对数组的引用 index : int类型 value : 引用类型 |
||||||||||||||
|
0x54 |
bastore |
将栈顶boolean或byte型数值存入指定数组的指定下标处 |
||||||||||||||
|
0x55 |
castore |
将栈顶char型数值存入指定数组的指定下标处 |
||||||||||||||
|
0x56 |
sastore |
将栈顶short型数值存入指定数组的指定下标处 |
||||||||||||||
|
0x57 |
pop |
栈顶数值出栈 (该栈顶数值不能是long或double型) |
||||||||||||||
|
0x58 |
pop2 |
栈顶的一个(如果是long、double型的)或两个(其它类型的)数值出栈 |
||||||||||||||
|
0x59 |
dup |
复制栈顶数值,并且复制值进栈 |
||||||||||||||
|
0x5A |
dup_x1 |
复制栈顶数值,并且复制值进栈2次 |
||||||||||||||
|
0x5B |
dup_x2 |
复制栈顶数值,并且复制值进栈2次或3次 |
||||||||||||||
|
0x5C |
dup2 |
复制栈顶一个(long、double型的)或两个(其它类型的)数值,并且复制值进栈 |
||||||||||||||
|
0x5D |
dup2_x1 |
|||||||||||||||
|
0x5E |
dup2_x2 |
|||||||||||||||
|
0x5F |
swap |
栈顶的两个数值互换(要求栈顶的两个数值不能是long或double型的) |
||||||||||||||
|
0x60 |
iadd |
栈顶两int型数值相加,并且结果进栈 |
||||||||||||||
|
0x61 |
ladd |
栈顶两long型数值相加,并且结果进栈 |
||||||||||||||
|
0x62 |
fadd |
栈顶两float型数值相加,并且结果进栈 |
||||||||||||||
|
0x63 |
dadd |
栈顶两double型数值相加,并且结果进栈 |
||||||||||||||
|
0x64 |
isub |
栈顶两int型数值相减,并且结果进栈 |
||||||||||||||
|
0x65 |
lsub |
栈顶两long型数值相减,并且结果进栈 |
||||||||||||||
|
0x66 |
fsub |
栈顶两float型数值相减,并且结果进栈 |
||||||||||||||
|
0x67 |
dsub |
栈顶两double型数值相减,并且结果进栈 |
||||||||||||||
|
0x68 |
imul |
栈顶两int型数值相乘,并且结果进栈 |
||||||||||||||
|
0x69 |
lmul |
栈顶两long型数值相乘,并且结果进栈 |
||||||||||||||
|
0x6A |
fmul |
栈顶两float型数值相乘,并且结果进栈 |
||||||||||||||
|
0x6B |
dmul |
栈顶两double型数值相乘,并且结果进栈 |
||||||||||||||
|
0x6C |
idiv |
栈顶两int型数值相除,并且结果进栈 |
||||||||||||||
|
0x6D |
ldiv |
栈顶两long型数值相除,并且结果进栈 |
||||||||||||||
|
0x6E |
fdiv |
栈顶两float型数值相除,并且结果进栈 |
||||||||||||||
|
0x6F |
ddiv |
栈顶两double型数值相除,并且结果进栈 |
||||||||||||||
|
0x70 |
irem |
栈顶两int型数值作取模运算,并且结果进栈 |
||||||||||||||
|
0x71 |
lrem |
栈顶两long型数值作取模运算,并且结果进栈 |
||||||||||||||
|
0x72 |
frem |
栈顶两float型数值作取模运算,并且结果进栈 |
||||||||||||||
|
0x73 |
drem |
栈顶两double型数值作取模运算,并且结果进栈 |
||||||||||||||
|
0x74 |
ineg |
栈顶int型数值取负,并且结果进栈 |
||||||||||||||
|
0x75 |
lneg |
栈顶long型数值取负,并且结果进栈 |
||||||||||||||
|
0x76 |
fneg |
栈顶float型数值取负,并且结果进栈 |
||||||||||||||
|
0x77 |
dneg |
栈顶double型数值取负,并且结果进栈 |
||||||||||||||
|
0x78 |
ishl |
int型数值左移指定位数,并且结果进栈 |
||||||||||||||
|
0x79 |
lshl |
long型数值左移指定位数,并且结果进栈 |
||||||||||||||
|
0x7A |
ishr |
int型数值带符号右移指定位数,并且结果进栈 |
||||||||||||||
|
0x7B |
lshr |
long型数值带符号右移指定位数,并且结果进栈 |
||||||||||||||
|
0x7C |
iushr |
int型数值无符号右移指定位数,并且结果进栈 |
||||||||||||||
|
0x7D |
lushr |
long型数值无符号右移指定位数,并且结果进栈 |
||||||||||||||
|
0x7E |
iand |
栈顶两int型数值按位与,并且结果进栈 |
||||||||||||||
|
0x7F |
land |
栈顶两long型数值按位与,并且结果进栈 |
||||||||||||||
|
0x80 |
ior |
栈顶两int型数值按位或,并且结果进栈 |
||||||||||||||
|
0x81 |
lor |
栈顶两long型数值按位或,并且结果进栈 |
||||||||||||||
|
0x82 |
ixor |
栈顶两int型数值按位异或,并且结果进栈 |
||||||||||||||
|
0x83 |
lxor |
栈顶两long型数值按位异或,并且结果进栈 |
||||||||||||||
|
0x84 |
iinc |
指定int型变量增加指定值 |
||||||||||||||
|
0x85 |
i2l |
栈顶int值强转long值,并且结果进栈 |
||||||||||||||
|
0x86 |
i2f |
栈顶int值强转float值,并且结果进栈 |
||||||||||||||
|
0x87 |
i2d |
栈顶int值强转double值,并且结果进栈 |
||||||||||||||
|
0x88 |
l2i |
栈顶long值强转int值,并且结果进栈 |
||||||||||||||
|
0x89 |
l2f |
栈顶long值强转float值,并且结果进栈 |
||||||||||||||
|
0x8A |
l2d |
栈顶long值强转double值,并且结果进栈 |
||||||||||||||
|
0x8B |
f2i |
栈顶float值强转int值,并且结果进栈 |
||||||||||||||
|
0x8C |
f2l |
栈顶float值强转long值,并且结果进栈 |
||||||||||||||
|
0x8D |
f2d |
栈顶float值强转double值,并且结果进栈 |
||||||||||||||
|
0x8E |
d2i |
栈顶double值强转int值,并且结果进栈 |
||||||||||||||
|
0x8F |
d2l |
栈顶double值强转long值,并且结果进栈 |
||||||||||||||
|
0x90 |
d2f |
栈顶double值强转float值,并且结果进栈 |
||||||||||||||
|
0x91 |
i2b |
栈顶int值强转byte值,并且结果进栈 |
||||||||||||||
|
0x92 |
i2c |
栈顶int值强转char值,并且结果进栈 |
||||||||||||||
|
0x93 |
i2s |
栈顶int值强转short值,并且结果进栈 |
||||||||||||||
|
0x94 |
lcmp |
比较栈顶两long型数值大小,并且结果(1,0,-1)进栈 |
||||||||||||||
|
0x95 |
fcmpl |
比较栈顶两float型数值大小,并且结果(1,0,-1)进栈;当其中一个数值为NaN时, -1进栈 |
||||||||||||||
|
0x96 |
fcmpg |
比较栈顶两float型数值大小,并且结果(1,0,-1)进栈;当其中一个数值为NaN时,1进栈 |
||||||||||||||
|
0x97 |
dcmpl |
比较栈顶两double型数值大小,并且结果(1,0,-1)进栈;当其中一个数值为NaN时,-1进栈 |
||||||||||||||
|
0x98 |
dcmpg |
比较栈顶两double型数值大小,并且结果(1,0,-1)进栈;当其中一个数值为NaN时,1进栈 |
||||||||||||||
|
0x99 |
ifeq |
当栈顶int型数值等于0时跳转 |
||||||||||||||
|
0x9A |
ifne |
当栈顶int型数值不等于0时跳转 |
||||||||||||||
|
0x9B |
iflt |
当栈顶int型数值小于0时跳转 |
||||||||||||||
|
0x9C |
ifge |
当栈顶int型数值大于等于0时跳转 |
||||||||||||||
|
0x9D |
ifgt |
当栈顶int型数值大于0时跳转 |
||||||||||||||
|
0x9E |
ifle |
当栈顶int型数值小于等于0时跳转 |
||||||||||||||
|
0x9F |
if_icmpeq |
比较栈顶两int型数值大小,当结果等于0时跳转 |
||||||||||||||
|
0xA0 |
if_icmpne |
比较栈顶两int型数值大小,当结果不等于0时跳转 |
||||||||||||||
|
0xA1 |
if_icmplt |
比较栈顶两int型数值大小,当结果小于0时跳转 |
||||||||||||||
|
0xA2 |
if_icmpge |
比较栈顶两int型数值大小,当结果大于等于0时跳转 |
||||||||||||||
|
0xA3 |
if_icmpgt |
比较栈顶两int型数值大小,当结果大于0时跳转 |
||||||||||||||
|
0xA4 |
if_icmple |
比较栈顶两int型数值大小,当结果小于等于0时跳转 |
||||||||||||||
|
0xA5 |
if_acmpeq |
比较栈顶两引用型数值,当结果相等时跳转 |
||||||||||||||
|
0xA6 |
if_acmpne |
比较栈顶两引用型数值,当结果不相等时跳转 |
||||||||||||||
|
0xA7 |
goto |
无条件跳转 |
||||||||||||||
|
0xA8 |
jsr |
跳转至指定16位offset位置,并将jsr下一条指令地址压入栈顶 |
||||||||||||||
|
0xA9 |
ret |
返回至局部变量指定的index的指令位置(通常与jsr、jsr_w联合使用) |
||||||||||||||
|
0xAA |
tableswitch |
用于switch条件跳转,case值连续(可变长度指令) |
||||||||||||||
|
0xAB |
lookupswitch |
用于switch条件跳转,case值不连续(可变长度指令) |
||||||||||||||
|
0xAC |
ireturn |
当前方法返回int |
||||||||||||||
|
0xAD |
lreturn |
当前方法返回long |
||||||||||||||
|
0xAE |
freturn |
当前方法返回float |
||||||||||||||
|
0xAF |
dreturn |
当前方法返回double |
||||||||||||||
|
0xB0 |
areturn |
指令格式: areturn 功能描述: 从方法中返回一个对象的引用。 抛出异常: 如果当前方法是
objectref : 被返回的对象引用 |
||||||||||||||
|
0xB1 |
return |
当前方法返回void |
||||||||||||||
|
0xB2 |
getstatic |
获取指定类的静态域,并将其值压入栈顶 |
||||||||||||||
|
0xB3 |
putstatic |
为指定的类的静态域赋值 |
||||||||||||||
|
0xB4 |
getfield |
获取指定类的实例域,并将其值压入栈顶 |
||||||||||||||
|
0xB5 |
putfield |
为指定的类的实例域赋值 |
||||||||||||||
|
0xB6 |
invokevirtual |
调用实例方法 |
||||||||||||||
|
0xB7 |
invokespecial |
调用超类构造方法、实例初始化方法、私有方法 |
||||||||||||||
|
0xB8 |
invokestatic |
调用静态方法 |
||||||||||||||
|
0xb9 |
invokeinterface |
调用接口方法 |
||||||||||||||
|
0xBA |
--- |
因为历史原因,该码点为未使用的保留码点 |
||||||||||||||
|
0xBB |
new |
创建一个对象,并且其引用进栈 |
||||||||||||||
|
0xBC |
newarray |
创建一个基本类型数组,并且其引用进栈 |
||||||||||||||
|
0xBD |
anewarray |
指令格式: anewarray index1 index2 功能描述: 栈顶数值(count)作为数组长度,创建 一个引用 型数组。栈顶数值出栈,数组引用进栈。 抛出异常: 如果count小于0,会抛出 NegativeArraySizeException
count: int类型。 arrayref: 对所创建的数组的引用。 |
||||||||||||||
|
0xBE |
arraylength |
指令格式: arraylength 功能描述: 栈顶的数组引用(arrayref)出栈,该 数组的长度进栈。 抛出异常: 如果arrayref的值为null,会抛出NullPointerException。
arrayref: 数组引用 length: 数组长度 |
||||||||||||||
|
0xBF |
athrow |
指令格式: athrow 功能描述: 将栈顶的数值作为异常或错误抛出 抛出异常: 如果栈顶数值为null,则使用NullPointerException代替栈顶数值抛出。如果方法是的,则有可能抛出 IllegalMonitorStateException。
objectref: Throwable或其子类的实例的引用。 |
||||||||||||||
|
0xC0 |
checkcast |
类型转换检查,如果该检查未通过将会抛出ClassCastException异常 |
||||||||||||||
|
0xc1 |
instanceof |
检查对象是否是指定的类的实例。如果是,1进栈;否则,0进栈 |
||||||||||||||
|
0xC2 |
monitorenter |
获得对象锁 |
||||||||||||||
|
0xC3 |
monitorexit |
释放对象锁 |
||||||||||||||
|
0xC4 |
wide |
用于修改其他指令的行为 |
||||||||||||||
|
0xC5 |
multianewarray |
创建指定类型和维度的多维数组(执行该指令时,栈中必须包含各维度的长度值),并且其引用值进栈 |
||||||||||||||
|
0xC6 |
ifnull |
为null时跳转 |
||||||||||||||
|
0xC7 |
ifnonnull |
不为null时跳转 |
||||||||||||||
|
0xC8 |
goto_w |
无条件跳转(宽索引) |
||||||||||||||
|
0xC9 |
jsr_w |
跳转至指定32位offset位置,并且jsr_w下一条指令地址进栈 |
||||||||||||||
|
0xCA |
breakpoint |
|||||||||||||||
|
0xFE |
impdep1 |
|||||||||||||||
|
0xFF |
impdep2 |
|||||||||||||||
JVM指令集的更多相关文章
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符
说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...
- java内功 ---- jvm虚拟机原理总结,侧重于虚拟机类加载执行系统
参考书籍:<深入理解java虚拟机>,三天时间用了八个小时看完,像读一本武侠小说,挺爽. 另外需声明:图片都是从我自己的csdn博客转载,所以虽然有csdn标识,但都是我自己画的图片. j ...
- 深入解析java虚拟机-jvm运行机制
转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...
- java核心技术-(总结自杨晓峰-java核心技术36讲)
1. 谈谈你对java平台的理解 首先是java最显著的两个特性,一次写入处处运行:还有垃圾收集器gc,gc能够对java内存进行管理回收,程序员不需要关心内存的分配和回收问题 然后谈谈jre和jdk ...
- 【JAVA】虚拟机指令集
[JAVA]虚拟机指令集 – – – 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 icons ...
- JAVA虚拟机(JVM)以及跨平台原理(JDK、JRE、JVM)
相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...
- java核心技术卷一
java核心技术卷一 java基础类型 整型 数据类型 字节数 取值范围 int 4 +_2^4*8-1 short 2 +_2^2*8-1 long 8 +_2^8*8-1 byte 1 -128- ...
- 【转+存】JVM指令集
jvm指令集: 转载地址:https://www.cnblogs.com/yaoyinglong/p/4300447.html 一.未归类系列A 此系列暂未归类. 指令码 助记符 ...
- 基于栈的指令集与基于寄存器的指令集的区别,JVM指令集实例
现代JVM在执行Java代码的时候,通常都会将解释执行与编译执行两者结合起来 所谓解释执行,就是通过解释器来读取字节码,遇到相应的指令就去执行该指令. 所谓编译执行,就是通过即时编译器(Just In ...
随机推荐
- 创建Dynamic Web Project时 显示最新Apache Tomcat 8.0 的方法
创建Dynamic Web Project时 显示最新Apache Tomcat 8.0 等的方法 解决办法如下: 第一步:eclipse菜单help->eclipse marketplac ...
- mysql中文查询问题
alter table t_foo change `str` `str` varchar(100) character set utf8 not null ;
- Oracle SQL Developer 调试存储过程步骤(Oracle)
1.首先你编译通过你的存储过程,编译的时候一定要选“编译以进行调试”. 2.在想要调试的行上设置好断点. 3.点击“调试”按钮,然后输入存储过程入参,点“确定”开始调试. 4.断点进入后,上方会出现一 ...
- dotnet run 提示System.Net.Sockets.SocketException (10049): 在其上下文中,该请求的地址无效。
更换端口号试一下. 查看官方文档 PS: 使用帮助命令 -h,可以指定启动配置文件: dotnet run --launch-profile xxx 例如下面的配置文件,假如我们要使用codes-t ...
- 为什么text的值改变后onchange没有反应?
onchange发生在元素失去焦点后,而不是想象中的元素的值发生改变的时候.其实它的作用就跟onblur(失去焦点事件)差不多,只不过onchange是失去焦点且值发生了改变.要想实现目的,可以改用o ...
- oracle sql语句大全
ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约 ...
- css伪类及伪元素用法
注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的读者可以自己尝试: :active 大致效果为用鼠标 ...
- 干货 | 10分钟玩转PWA
关于PWA PWA(Progressive Web App), 即渐进式web应用.PWA本质上是web应用,目的是通过多项新技术,在安全.性能.体验等方面给用户原生应用的体验.而且无需像原生应用那样 ...
- 合适IT人的健身技巧
合适IT人的健身技巧: 健身益寿生活十条 虽然遗传学家说人的平均寿命可长达120岁,但本世纪人的寿命远远达不到这个数字^有鉴于此,国外一批医生.心理学家和营养学家制定了健身益寿生活10条准则,认为如能 ...
- 笔记javascript
// var demo1=12;// alert('点击确定按钮看结果'+demo1);// for(var i = 0; i<10;i++)// {// document.write( ...