Java bytecode instruction listings

【0】README

0.1)these contents are shiped from  https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings


Mnemonic Opcode
(in hexadecimal)
Opcode (in binary) Other bytes Stack
[before]→[after]
Description
(no name)cb-fd   these values are currently unassigned for opcodes and are reserved for future use
aaload320011 0010 arrayref, index → valueload onto the stack a reference from an array
aastore530101 0011 arrayref, index, value →store into a reference in an array
aconst_null010000 0001 → nullpush a null reference onto the stack
aload190001 10011: index→ objectrefload a reference onto the stack from a local variable #index
aload_02a0010 1010 → objectrefload a reference onto the stack from local variable 0
aload_12b0010 1011 → objectrefload a reference onto the stack from local variable 1
aload_22c0010 1100 → objectrefload a reference onto the stack from local variable 2
aload_32d0010 1101 → objectrefload a reference onto the stack from local variable 3
anewarraybd1011 11012: indexbyte1, indexbyte2count → arrayrefcreate a new array of references of length count and component type identified by the class reference index (indexbyte1 << 8 + indexbyte2) in the constant pool
areturnb01011 0000 objectref → [empty]return a reference from a method
arraylengthbe1011 1110 arrayref → lengthget the length of an array
astore3a0011 10101: indexobjectref →store a reference into a local variable #index
astore_04b0100 1011 objectref →store a reference into local variable 0
astore_14c0100 1100 objectref →store a reference into local variable 1
astore_24d0100 1101 objectref →store a reference into local variable 2
astore_34e0100 1110 objectref →store a reference into local variable 3
athrowbf1011 1111 objectref → [empty], objectrefthrows an error or exception (notice that the rest of the stack is cleared, leaving only a reference to the Throwable)
baload330011 0011 arrayref, index → valueload a byte or Boolean value from an array
bastore540101 0100 arrayref, index, value →store a byte or Boolean value into an array
bipush100001 00001: byte→ valuepush a byte onto the stack as an integer value
breakpointca1100 1010  reserved for breakpoints in Java debuggers; should not appear in any class file
caload340011 0100 arrayref, index → valueload a char from an array
castore550101 0101 arrayref, index, value →store a char into an array
checkcastc01100 00002: indexbyte1, indexbyte2objectref → objectrefchecks whether an objectref is of a certain type, the class reference of which is in the constant pool at index (indexbyte1 << 8 + indexbyte2)
d2f901001 0000 value → resultconvert a double to a float
d2i8e1000 1110 value → resultconvert a double to an int
d2l8f1000 1111 value → resultconvert a double to a long
dadd630110 0011 value1, value2 → resultadd two doubles
daload310011 0001 arrayref, index → valueload a double from an array
dastore520101 0010 arrayref, index, value →store a double into an array
dcmpg981001 1000 value1, value2 → resultcompare two doubles
dcmpl971001 0111 value1, value2 → resultcompare two doubles
dconst_00e0000 1110 → 0.0push the constant 0.0 onto the stack
dconst_10f0000 1111 → 1.0push the constant 1.0 onto the stack
ddiv6f0110 1111 value1, value2 → resultdivide two doubles
dload180001 10001: index→ valueload a double value from a local variable #index
dload_0260010 0110 → valueload a double from local variable 0
dload_1270010 0111 → valueload a double from local variable 1
dload_2280010 1000 → valueload a double from local variable 2
dload_3290010 1001 → valueload a double from local variable 3
dmul6b0110 1011 value1, value2 → resultmultiply two doubles
dneg770111 0111 value → resultnegate a double
drem730111 0011 value1, value2 → resultget the remainder from a division between two doubles
dreturnaf1010 1111 value → [empty]return a double from a method
dstore390011 10011: indexvalue →store a double value into a local variable #index
dstore_0470100 0111 value →store a double into local variable 0
dstore_1480100 1000 value →store a double into local variable 1
dstore_2490100 1001 value →store a double into local variable 2
dstore_34a0100 1010 value →store a double into local variable 3
dsub670110 0111 value1, value2 → resultsubtract a double from another
dup590101 1001 value → value, valueduplicate the value on top of the stack
dup25c0101 1100 {value2, value1} → {value2, value1}, {value2, value1}duplicate top two stack words (two values, if value1 is not double nor long; a single value, if value1 is double or long)
dup2_x15d0101 1101 value3, {value2, value1} → {value2, value1}, value3, {value2, value1}duplicate two words and insert beneath third word (see explanation above)
dup2_x25e0101 1110 {value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1}duplicate two words and insert beneath fourth word
dup_x15a0101 1010 value2, value1 → value1, value2, value1insert a copy of the top value into the stack two values from the top. value1 and value2 must not be of the type double or long.
dup_x25b0101 1011 value3, value2, value1 → value1, value3, value2, value1insert a copy of the top value into the stack two (if value2 is double or long it takes up the entry of value3, too) or three values (if value2 is neither double nor long) from the top
f2d8d1000 1101 value → resultconvert a float to a double
f2i8b1000 1011 value → resultconvert a float to an int
f2l8c1000 1100 value → resultconvert a float to a long
fadd620110 0010 value1, value2 → resultadd two floats
faload300011 0000 arrayref, index → valueload a float from an array
fastore510101 0001 arrayref, index, value →store a float in an array
fcmpg961001 0110 value1, value2 → resultcompare two floats
fcmpl951001 0101 value1, value2 → resultcompare two floats
fconst_00b0000 1011 → 0.0fpush 0.0f on the stack
fconst_10c0000 1100 → 1.0fpush 1.0f on the stack
fconst_20d0000 1101 → 2.0fpush 2.0f on the stack
fdiv6e0110 1110 value1, value2 → resultdivide two floats
fload170001 01111: index→ valueload a float value from a local variable #index
fload_0220010 0010 → valueload a float value from local variable 0
fload_1230010 0011 → valueload a float value from local variable 1
fload_2240010 0100 → valueload a float value from local variable 2
fload_3250010 0101 → valueload a float value from local variable 3
fmul6a0110 1010 value1, value2 → resultmultiply two floats
fneg760111 0110 value → resultnegate a float
frem720111 0010 value1, value2 → resultget the remainder from a division between two floats
freturnae1010 1110 value → [empty]return a float
fstore380011 10001: indexvalue →store a float value into a local variable #index
fstore_0430100 0011 value →store a float value into local variable 0
fstore_1440100 0100 value →store a float value into local variable 1
fstore_2450100 0101 value →store a float value into local variable 2
fstore_3460100 0110 value →store a float value into local variable 3
fsub660110 0110 value1, value2 → resultsubtract two floats
getfieldb41011 01002: index1, index2objectref → valueget a field value of an object objectref, where the field is identified by field reference in the constant pool index (index1 << 8 + index2)
getstaticb21011 00102: index1, index2→ valueget a static field value of a class, where the field is identified by field reference in the constant pool index (index1 << 8 + index2)
gotoa71010 01112: branchbyte1, branchbyte2[no change]goes to another instruction at branchoffset (signed short constructed from unsigned bytesbranchbyte1 << 8 + branchbyte2)
goto_wc81100 10004: branchbyte1, branchbyte2, branchbyte3, branchbyte4[no change]goes to another instruction at branchoffset (signed int constructed from unsigned bytesbranchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4)
i2b911001 0001 value → resultconvert an int into a byte
i2c921001 0010 value → resultconvert an int into a character
i2d871000 0111 value → resultconvert an int into a double
i2f861000 0110 value → resultconvert an int into a float
i2l851000 0101 value → resultconvert an int into a long
i2s931001 0011 value → resultconvert an int into a short
iadd600110 0000 value1, value2 → resultadd two ints
iaload2e0010 1110 arrayref, index → valueload an int from an array
iand7e0111 1110 value1, value2 → resultperform a bitwise and on two integers
iastore4f0100 1111 arrayref, index, value →store an int into an array
iconst_0030000 0011 → 0load the int value 0 onto the stack
iconst_1040000 0100 → 1load the int value 1 onto the stack
iconst_2050000 0101 → 2load the int value 2 onto the stack
iconst_3060000 0110 → 3load the int value 3 onto the stack
iconst_4070000 0111 → 4load the int value 4 onto the stack
iconst_5080000 1000 → 5load the int value 5 onto the stack
iconst_m1020000 0010 → -1load the int value −1 onto the stack
idiv6c0110 1100 value1, value2 → resultdivide two integers
if_acmpeqa51010 01012: branchbyte1, branchbyte2value1, value2 →if references are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_acmpnea61010 01102: branchbyte1, branchbyte2value1, value2 →if references are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpeq9f1001 11112: branchbyte1, branchbyte2value1, value2 →if ints are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpgea21010 00102: branchbyte1, branchbyte2value1, value2 →if value1 is greater than or equal to value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpgta31010 00112: branchbyte1, branchbyte2value1, value2 →if value1 is greater than value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmplea41010 01002: branchbyte1, branchbyte2value1, value2 →if value1 is less than or equal to value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmplta11010 00012: branchbyte1, branchbyte2value1, value2 →if value1 is less than value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpnea01010 00002: branchbyte1, branchbyte2value1, value2 →if ints are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifeq991001 10012: branchbyte1, branchbyte2value →if value is 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifge9c1001 11002: branchbyte1, branchbyte2value →if value is greater than or equal to 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifgt9d1001 11012: branchbyte1, branchbyte2value →if value is greater than 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifle9e1001 11102: branchbyte1, branchbyte2value →if value is less than or equal to 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
iflt9b1001 10112: branchbyte1, branchbyte2value →if value is less than 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifne9a1001 10102: branchbyte1, branchbyte2value →if value is not 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifnonnullc71100 01112: branchbyte1, branchbyte2value →if value is not null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifnullc61100 01102: branchbyte1, branchbyte2value →if value is null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
iinc841000 01002: index, const[No change]increment local variable #index by signed byte const
iload150001 01011: index→ valueload an int value from a local variable #index
iload_01a0001 1010 → valueload an int value from local variable 0
iload_11b0001 1011 → valueload an int value from local variable 1
iload_21c0001 1100 → valueload an int value from local variable 2
iload_31d0001 1101 → valueload an int value from local variable 3
impdep1fe1111 1110  reserved for implementation-dependent operations within debuggers; should not appear in any class file
impdep2ff1111 1111  reserved for implementation-dependent operations within debuggers; should not appear in any class file
imul680110 1000 value1, value2 → resultmultiply two integers
ineg740111 0100 value → resultnegate int
instanceofc11100 00012: indexbyte1, indexbyte2objectref → resultdetermines if an object objectref is of a given type, identified by class reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokedynamicba1011 10104: indexbyte1, indexbyte2, 0, 0[arg1, [arg2 ...]] → resultinvokes a dynamic method and puts the result on the stack (might be void); the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokeinterfaceb91011 10014: indexbyte1, indexbyte2, count, 0objectref, [arg1, arg2, ...] → resultinvokes an interface method on object objectref and puts the result on the stack (might be void); the interface method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokespecialb71011 01112: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] → resultinvoke instance method on object objectref and puts the result on the stack (might be void); the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokestaticb81011 10002: indexbyte1, indexbyte2[arg1, arg2, ...] → resultinvoke a static method and puts the result on the stack (might be void); the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokevirtualb61011 01102: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] → resultinvoke virtual method on object objectref and puts the result on the stack (might be void); the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
ior801000 0000 value1, value2 → resultbitwise int or
irem700111 0000 value1, value2 → resultlogical int remainder
ireturnac1010 1100 value → [empty]return an integer from a method
ishl780111 1000 value1, value2 → resultint shift left
ishr7a0111 1010 value1, value2 → resultint arithmetic shift right
istore360011 01101: indexvalue →store int value into variable #index
istore_03b0011 1011 value →store int value into variable 0
istore_13c0011 1100 value →store int value into variable 1
istore_23d0011 1101 value →store int value into variable 2
istore_33e0011 1110 value →store int value into variable 3
isub640110 0100 value1, value2 → resultint subtract
iushr7c0111 1100 value1, value2 → resultint logical shift right
ixor821000 0010 value1, value2 → resultint xor
jsra81010 10002: branchbyte1, branchbyte2→ addressjump to subroutine at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2) and place the return address on the stack
jsr_wc91100 10014: branchbyte1, branchbyte2, branchbyte3, branchbyte4→ addressjump to subroutine at branchoffset (signed int constructed from unsigned bytes branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4) and place the return address on the stack
l2d8a1000 1010 value → resultconvert a long to a double
l2f891000 1001 value → resultconvert a long to a float
l2i881000 1000 value → resultconvert a long to a int
ladd610110 0001 value1, value2 → resultadd two longs
laload2f0010 1111 arrayref, index → valueload a long from an array
land7f0111 1111 value1, value2 → resultbitwise and of two longs
lastore500101 0000 arrayref, index, value →store a long to an array
lcmp941001 0100 value1, value2 → resultpush 0 if the two longs are the same, 1 if value1 is greater than value2, -1 otherwise
lconst_0090000 1001 → 0Lpush the long 0 onto the stack
lconst_10a0000 1010 → 1Lpush the long 1 onto the stack
ldc120001 00101: index→ valuepush a constant #index from a constant pool (String, int or float) onto the stack
ldc2_w140001 01002: indexbyte1, indexbyte2→ valuepush a constant #index from a constant pool (double or long) onto the stack (wide index is constructed as indexbyte1 << 8 + indexbyte2)
ldc_w130001 00112: indexbyte1, indexbyte2→ valuepush a constant #index from a constant pool (String, int or float) onto the stack (wideindex is constructed as indexbyte1 << 8 + indexbyte2)
ldiv6d0110 1101 value1, value2 → resultdivide two longs
lload160001 01101: index→ valueload a long value from a local variable #index
lload_01e0001 1110 → valueload a long value from a local variable 0
lload_11f0001 1111 → valueload a long value from a local variable 1
lload_2200010 0000 → valueload a long value from a local variable 2
lload_3210010 0001 → valueload a long value from a local variable 3
lmul690110 1001 value1, value2 → resultmultiply two longs
lneg750111 0101 value → resultnegate a long
lookupswitchab1010 10114+: <0–3 bytes padding>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, match-offset pairs...key →a target address is looked up from a table using a key and execution continues from the instruction at that address
lor811000 0001 value1, value2 → resultbitwise or of two longs
lrem710111 0001 value1, value2 → resultremainder of division of two longs
lreturnad1010 1101 value → [empty]return a long value
lshl790111 1001 value1, value2 → resultbitwise shift left of a long value1 by int value2 positions
lshr7b0111 1011 value1, value2 → resultbitwise shift right of a long value1 by int value2 positions
lstore370011 01111: indexvalue →store a long value in a local variable #index
lstore_03f0011 1111 value →store a long value in a local variable 0
lstore_1400100 0000 value →store a long value in a local variable 1
lstore_2410100 0001 value →store a long value in a local variable 2
lstore_3420100 0010 value →store a long value in a local variable 3
lsub650110 0101 value1, value2 → resultsubtract two longs
lushr7d0111 1101 value1, value2 → resultbitwise shift right of a long value1 by int value2 positions, unsigned
lxor831000 0011 value1, value2 → resultbitwise exclusive or of two longs
monitorenterc21100 0010 objectref →enter monitor for object ("grab the lock" – start of synchronized() section)
monitorexitc31100 0011 objectref →exit monitor for object ("release the lock" – end of synchronized() section)
multianewarrayc51100 01013: indexbyte1, indexbyte2, dimensionscount1, [count2,...] → arrayrefcreate a new array of dimensions dimensions with elements of type identified by class reference in constant pool index (indexbyte1 << 8 + indexbyte2); the sizes of each dimension is identified by count1, [count2, etc.]
newbb1011 10112: indexbyte1, indexbyte2→ objectrefcreate new object of type identified by class reference in constant pool index (indexbyte1 << 8 + indexbyte2)
newarraybc1011 11001: atypecount → arrayrefcreate new array with count elements of primitive type identified by atype
nop000000 0000 [No change]perform no operation
pop570101 0111 value →discard the top value on the stack
pop2580101 1000 {value2, value1} →discard the top two values on the stack (or one value, if it is a double or long)
putfieldb51011 01012: indexbyte1, indexbyte2objectref, value →set field to value in an object objectref, where the field is identified by a field reference index in constant pool (indexbyte1 << 8 + indexbyte2)
putstaticb31011 00112: indexbyte1, indexbyte2value →set static field to value in a class, where the field is identified by a field referenceindex in constant pool (indexbyte1 << 8 + indexbyte2)
reta91010 10011: index[No change]continue execution from address taken from a local variable #index (the asymmetry with jsr is intentional)
returnb11011 0001 → [empty]return void from method
saload350011 0101 arrayref, index → valueload short from array
sastore560101 0110 arrayref, index, value →store short to array
sipush110001 00012: byte1, byte2→ valuepush a short onto the stack
swap5f0101 1111 value2, value1 → value1, value2swaps two top words on the stack (note that value1 and value2 must not be double or long)
tableswitchaa1010 10104+: [0–3 bytes padding], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, lowbyte2, lowbyte3, lowbyte4, highbyte1, highbyte2, highbyte3, highbyte4, jump offsets...index →continue execution from an address in the table at offset index
widec41100 01003/5: opcode, indexbyte1, indexbyte2
or
iinc, indexbyte1, indexbyte2, countbyte1, countbyte2
[same as for corresponding instructions]execute opcode, where opcode is either iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore, or ret, but assume the index is 16 bit; or execute iinc, where theindex is 16 bits and the constant to increment by is a signed 16 bit short

Mnemonic Opcode
(in hexadecimal)
Opcode (in binary) Other bytes Stack
[before]→[after]
Description
(no name)cb-fd   these values are currently unassigned for opcodes and are reserved for future use
aaload320011 0010 arrayref, index → valueload onto the stack a reference from an array
aastore530101 0011 arrayref, index, value →store into a reference in an array
aconst_null010000 0001 → nullpush a null reference onto the stack
aload190001 10011: index→ objectrefload a reference onto the stack from a local variable #index
aload_02a0010 1010 → objectrefload a reference onto the stack from local variable 0
aload_12b0010 1011 → objectrefload a reference onto the stack from local variable 1
aload_22c0010 1100 → objectrefload a reference onto the stack from local variable 2
aload_32d0010 1101 → objectrefload a reference onto the stack from local variable 3
anewarraybd1011 11012: indexbyte1, indexbyte2count → arrayrefcreate a new array of references of length count and component type identified by the class reference index (indexbyte1 << 8 + indexbyte2) in the constant pool
areturnb01011 0000 objectref → [empty]return a reference from a method
arraylengthbe1011 1110 arrayref → lengthget the length of an array
astore3a0011 10101: indexobjectref →store a reference into a local variable #index
astore_04b0100 1011 objectref →store a reference into local variable 0
astore_14c0100 1100 objectref →store a reference into local variable 1
astore_24d0100 1101 objectref →store a reference into local variable 2
astore_34e0100 1110 objectref →store a reference into local variable 3
athrowbf1011 1111 objectref → [empty], objectrefthrows an error or exception (notice that the rest of the stack is cleared, leaving only a reference to the Throwable)
baload330011 0011 arrayref, index → valueload a byte or Boolean value from an array
bastore540101 0100 arrayref, index, value →store a byte or Boolean value into an array
bipush100001 00001: byte→ valuepush a byte onto the stack as an integer value
breakpointca1100 1010  reserved for breakpoints in Java debuggers; should not appear in any class file
caload340011 0100 arrayref, index → valueload a char from an array
castore550101 0101 arrayref, index, value →store a char into an array
checkcastc01100 00002: indexbyte1, indexbyte2objectref → objectrefchecks whether an objectref is of a certain type, the class reference of which is in the constant pool at index (indexbyte1 << 8 + indexbyte2)
d2f901001 0000 value → resultconvert a double to a float
d2i8e1000 1110 value → resultconvert a double to an int
d2l8f1000 1111 value → resultconvert a double to a long
dadd630110 0011 value1, value2 → resultadd two doubles
daload310011 0001 arrayref, index → valueload a double from an array
dastore520101 0010 arrayref, index, value →store a double into an array
dcmpg981001 1000 value1, value2 → resultcompare two doubles
dcmpl971001 0111 value1, value2 → resultcompare two doubles
dconst_00e0000 1110 → 0.0push the constant 0.0 onto the stack
dconst_10f0000 1111 → 1.0push the constant 1.0 onto the stack
ddiv6f0110 1111 value1, value2 → resultdivide two doubles
dload180001 10001: index→ valueload a double value from a local variable #index
dload_0260010 0110 → valueload a double from local variable 0
dload_1270010 0111 → valueload a double from local variable 1
dload_2280010 1000 → valueload a double from local variable 2
dload_3290010 1001 → valueload a double from local variable 3
dmul6b0110 1011 value1, value2 → resultmultiply two doubles
dneg770111 0111 value → resultnegate a double
drem730111 0011 value1, value2 → resultget the remainder from a division between two doubles
dreturnaf1010 1111 value → [empty]return a double from a method
dstore390011 10011: indexvalue →store a double value into a local variable #index
dstore_0470100 0111 value →store a double into local variable 0
dstore_1480100 1000 value →store a double into local variable 1
dstore_2490100 1001 value →store a double into local variable 2
dstore_34a0100 1010 value →store a double into local variable 3
dsub670110 0111 value1, value2 → resultsubtract a double from another
dup590101 1001 value → value, valueduplicate the value on top of the stack
dup25c0101 1100 {value2, value1} → {value2, value1}, {value2, value1}duplicate top two stack words (two values, if value1 is not double nor long; a single value, if value1 is double or long)
dup2_x15d0101 1101 value3, {value2, value1} → {value2, value1}, value3, {value2, value1}duplicate two words and insert beneath third word (see explanation above)
dup2_x25e0101 1110 {value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1}duplicate two words and insert beneath fourth word
dup_x15a0101 1010 value2, value1 → value1, value2, value1insert a copy of the top value into the stack two values from the top. value1 and value2 must not be of the type double or long.
dup_x25b0101 1011 value3, value2, value1 → value1, value3, value2, value1insert a copy of the top value into the stack two (if value2 is double or long it takes up the entry of value3, too) or three values (if value2 is neither double nor long) from the top
f2d8d1000 1101 value → resultconvert a float to a double
f2i8b1000 1011 value → resultconvert a float to an int
f2l8c1000 1100 value → resultconvert a float to a long
fadd620110 0010 value1, value2 → resultadd two floats
faload300011 0000 arrayref, index → valueload a float from an array
fastore510101 0001 arrayref, index, value →store a float in an array
fcmpg961001 0110 value1, value2 → resultcompare two floats
fcmpl951001 0101 value1, value2 → resultcompare two floats
fconst_00b0000 1011 → 0.0fpush 0.0f on the stack
fconst_10c0000 1100 → 1.0fpush 1.0f on the stack
fconst_20d0000 1101 → 2.0fpush 2.0f on the stack
fdiv6e0110 1110 value1, value2 → resultdivide two floats
fload170001 01111: index→ valueload a float value from a local variable #index
fload_0220010 0010 → valueload a float value from local variable 0
fload_1230010 0011 → valueload a float value from local variable 1
fload_2240010 0100 → valueload a float value from local variable 2
fload_3250010 0101 → valueload a float value from local variable 3
fmul6a0110 1010 value1, value2 → resultmultiply two floats
fneg760111 0110 value → resultnegate a float
frem720111 0010 value1, value2 → resultget the remainder from a division between two floats
freturnae1010 1110 value → [empty]return a float
fstore380011 10001: indexvalue →store a float value into a local variable #index
fstore_0430100 0011 value →store a float value into local variable 0
fstore_1440100 0100 value →store a float value into local variable 1
fstore_2450100 0101 value →store a float value into local variable 2
fstore_3460100 0110 value →store a float value into local variable 3
fsub660110 0110 value1, value2 → resultsubtract two floats
getfieldb41011 01002: index1, index2objectref → valueget a field value of an object objectref, where the field is identified by field reference in the constant pool index (index1 << 8 + index2)
getstaticb21011 00102: index1, index2→ valueget a static field value of a class, where the field is identified by field reference in the constant pool index (index1 << 8 + index2)
gotoa71010 01112: branchbyte1, branchbyte2[no change]goes to another instruction at branchoffset (signed short constructed from unsigned bytesbranchbyte1 << 8 + branchbyte2)
goto_wc81100 10004: branchbyte1, branchbyte2, branchbyte3, branchbyte4[no change]goes to another instruction at branchoffset (signed int constructed from unsigned bytesbranchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4)
i2b911001 0001 value → resultconvert an int into a byte
i2c921001 0010 value → resultconvert an int into a character
i2d871000 0111 value → resultconvert an int into a double
i2f861000 0110 value → resultconvert an int into a float
i2l851000 0101 value → resultconvert an int into a long
i2s931001 0011 value → resultconvert an int into a short
iadd600110 0000 value1, value2 → resultadd two ints
iaload2e0010 1110 arrayref, index → valueload an int from an array
iand7e0111 1110 value1, value2 → resultperform a bitwise and on two integers
iastore4f0100 1111 arrayref, index, value →store an int into an array
iconst_0030000 0011 → 0load the int value 0 onto the stack
iconst_1040000 0100 → 1load the int value 1 onto the stack
iconst_2050000 0101 → 2load the int value 2 onto the stack
iconst_3060000 0110 → 3load the int value 3 onto the stack
iconst_4070000 0111 → 4load the int value 4 onto the stack
iconst_5080000 1000 → 5load the int value 5 onto the stack
iconst_m1020000 0010 → -1load the int value −1 onto the stack
idiv6c0110 1100 value1, value2 → resultdivide two integers
if_acmpeqa51010 01012: branchbyte1, branchbyte2value1, value2 →if references are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_acmpnea61010 01102: branchbyte1, branchbyte2value1, value2 →if references are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpeq9f1001 11112: branchbyte1, branchbyte2value1, value2 →if ints are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpgea21010 00102: branchbyte1, branchbyte2value1, value2 →if value1 is greater than or equal to value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpgta31010 00112: branchbyte1, branchbyte2value1, value2 →if value1 is greater than value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmplea41010 01002: branchbyte1, branchbyte2value1, value2 →if value1 is less than or equal to value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmplta11010 00012: branchbyte1, branchbyte2value1, value2 →if value1 is less than value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpnea01010 00002: branchbyte1, branchbyte2value1, value2 →if ints are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifeq991001 10012: branchbyte1, branchbyte2value →if value is 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifge9c1001 11002: branchbyte1, branchbyte2value →if value is greater than or equal to 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifgt9d1001 11012: branchbyte1, branchbyte2value →if value is greater than 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifle9e1001 11102: branchbyte1, branchbyte2value →if value is less than or equal to 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
iflt9b1001 10112: branchbyte1, branchbyte2value →if value is less than 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifne9a1001 10102: branchbyte1, branchbyte2value →if value is not 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifnonnullc71100 01112: branchbyte1, branchbyte2value →if value is not null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
ifnullc61100 01102: branchbyte1, branchbyte2value →if value is null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
iinc841000 01002: index, const[No change]increment local variable #index by signed byte const
iload150001 01011: index→ valueload an int value from a local variable #index
iload_01a0001 1010 → valueload an int value from local variable 0
iload_11b0001 1011 → valueload an int value from local variable 1
iload_21c0001 1100 → valueload an int value from local variable 2
iload_31d0001 1101 → valueload an int value from local variable 3
impdep1fe1111 1110  reserved for implementation-dependent operations within debuggers; should not appear in any class file
impdep2ff1111 1111  reserved for implementation-dependent operations within debuggers; should not appear in any class file
imul680110 1000 value1, value2 → resultmultiply two integers
ineg740111 0100 value → resultnegate int
instanceofc11100 00012: indexbyte1, indexbyte2objectref → resultdetermines if an object objectref is of a given type, identified by class reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokedynamicba1011 10104: indexbyte1, indexbyte2, 0, 0[arg1, [arg2 ...]] → resultinvokes a dynamic method and puts the result on the stack (might be void); the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokeinterfaceb91011 10014: indexbyte1, indexbyte2, count, 0objectref, [arg1, arg2, ...] → resultinvokes an interface method on object objectref and puts the result on the stack (might be void); the interface method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokespecialb71011 01112: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] → resultinvoke instance method on object objectref and puts the result on the stack (might be void); the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokestaticb81011 10002: indexbyte1, indexbyte2[arg1, arg2, ...] → resultinvoke a static method and puts the result on the stack (might be void); the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
invokevirtualb61011 01102: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] → resultinvoke virtual method on object objectref and puts the result on the stack (might be void); the method is identified by method reference index in constant pool (indexbyte1 << 8 + indexbyte2)
ior801000 0000 value1, value2 → resultbitwise int or
irem700111 0000 value1, value2 → resultlogical int remainder
ireturnac1010 1100 value → [empty]return an integer from a method
ishl780111 1000 value1, value2 → resultint shift left
ishr7a0111 1010 value1, value2 → resultint arithmetic shift right
istore360011 01101: indexvalue →store int value into variable #index
istore_03b0011 1011 value →store int value into variable 0
istore_13c0011 1100 value →store int value into variable 1
istore_23d0011 1101 value →store int value into variable 2
istore_33e0011 1110 value →store int value into variable 3
isub640110 0100 value1, value2 → resultint subtract
iushr7c0111 1100 value1, value2 → resultint logical shift right
ixor821000 0010 value1, value2 → resultint xor
jsra81010 10002: branchbyte1, branchbyte2→ addressjump to subroutine at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2) and place the return address on the stack
jsr_wc91100 10014: branchbyte1, branchbyte2, branchbyte3, branchbyte4→ addressjump to subroutine at branchoffset (signed int constructed from unsigned bytes branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4) and place the return address on the stack
l2d8a1000 1010 value → resultconvert a long to a double
l2f891000 1001 value → resultconvert a long to a float
l2i881000 1000 value → resultconvert a long to a int
ladd610110 0001 value1, value2 → resultadd two longs
laload2f0010 1111 arrayref, index → valueload a long from an array
land7f0111 1111 value1, value2 → resultbitwise and of two longs
lastore500101 0000 arrayref, index, value →store a long to an array
lcmp941001 0100 value1, value2 → resultpush 0 if the two longs are the same, 1 if value1 is greater than value2, -1 otherwise
lconst_0090000 1001 → 0Lpush the long 0 onto the stack
lconst_10a0000 1010 → 1Lpush the long 1 onto the stack
ldc120001 00101: index→ valuepush a constant #index from a constant pool (String, int or float) onto the stack
ldc2_w140001 01002: indexbyte1, indexbyte2→ valuepush a constant #index from a constant pool (double or long) onto the stack (wide index is constructed as indexbyte1 << 8 + indexbyte2)
ldc_w130001 00112: indexbyte1, indexbyte2→ valuepush a constant #index from a constant pool (String, int or float) onto the stack (wideindex is constructed as indexbyte1 << 8 + indexbyte2)
ldiv6d0110 1101 value1, value2 → resultdivide two longs
lload160001 01101: index→ valueload a long value from a local variable #index
lload_01e0001 1110 → valueload a long value from a local variable 0
lload_11f0001 1111 → valueload a long value from a local variable 1
lload_2200010 0000 → valueload a long value from a local variable 2
lload_3210010 0001 → valueload a long value from a local variable 3
lmul690110 1001 value1, value2 → resultmultiply two longs
lneg750111 0101 value → resultnegate a long
lookupswitchab1010 10114+: <0–3 bytes padding>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, match-offset pairs...key →a target address is looked up from a table using a key and execution continues from the instruction at that address
lor811000 0001 value1, value2 → resultbitwise or of two longs
lrem710111 0001 value1, value2 → resultremainder of division of two longs
lreturnad1010 1101 value → [empty]return a long value
lshl790111 1001 value1, value2 → resultbitwise shift left of a long value1 by int value2 positions
lshr7b0111 1011 value1, value2 → resultbitwise shift right of a long value1 by int value2 positions
lstore370011 01111: indexvalue →store a long value in a local variable #index
lstore_03f0011 1111 value →store a long value in a local variable 0
lstore_1400100 0000 value →store a long value in a local variable 1
lstore_2410100 0001 value →store a long value in a local variable 2
lstore_3420100 0010 value →store a long value in a local variable 3
lsub650110 0101 value1, value2 → resultsubtract two longs
lushr7d0111 1101 value1, value2 → resultbitwise shift right of a long value1 by int value2 positions, unsigned
lxor831000 0011 value1, value2 → resultbitwise exclusive or of two longs
monitorenterc21100 0010 objectref →enter monitor for object ("grab the lock" – start of synchronized() section)
monitorexitc31100 0011 objectref →exit monitor for object ("release the lock" – end of synchronized() section)
multianewarrayc51100 01013: indexbyte1, indexbyte2, dimensionscount1, [count2,...] → arrayrefcreate a new array of dimensions dimensions with elements of type identified by class reference in constant pool index (indexbyte1 << 8 + indexbyte2); the sizes of each dimension is identified by count1, [count2, etc.]
newbb1011 10112: indexbyte1, indexbyte2→ objectrefcreate new object of type identified by class reference in constant pool index (indexbyte1 << 8 + indexbyte2)
newarraybc1011 11001: atypecount → arrayrefcreate new array with count elements of primitive type identified by atype
nop000000 0000 [No change]perform no operation
pop570101 0111 value →discard the top value on the stack
pop2580101 1000 {value2, value1} →discard the top two values on the stack (or one value, if it is a double or long)
putfieldb51011 01012: indexbyte1, indexbyte2objectref, value →set field to value in an object objectref, where the field is identified by a field reference index in constant pool (indexbyte1 << 8 + indexbyte2)
putstaticb31011 00112: indexbyte1, indexbyte2value →set static field to value in a class, where the field is identified by a field referenceindex in constant pool (indexbyte1 << 8 + indexbyte2)
reta91010 10011: index[No change]continue execution from address taken from a local variable #index (the asymmetry with jsr is intentional)
returnb11011 0001 → [empty]return void from method
saload350011 0101 arrayref, index → valueload short from array
sastore560101 0110 arrayref, index, value →store short to array
sipush110001 00012: byte1, byte2→ valuepush a short onto the stack
swap5f0101 1111 value2, value1 → value1, value2swaps two top words on the stack (note that value1 and value2 must not be double or long)
tableswitchaa1010 10104+: [0–3 bytes padding], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, lowbyte2, lowbyte3, lowbyte4, highbyte1, highbyte2, highbyte3, highbyte4, jump offsets...index →continue execution from an address in the table at offset index
widec41100 01003/5: opcode, indexbyte1, indexbyte2
or
iinc, indexbyte1, indexbyte2, countbyte1, countbyte2
[same as for corresponding instructions]execute opcode, where opcode is either iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore, or ret, but assume the index is 16 bit; or execute iinc, where theindex is 16 bits and the constant to increment by is a signed 16 bit short

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为wmi执行例外_称之为例外?

为wmi执行例外虽然这是一个有关测试和Wiremock的Java示例&#xff0c;但它涉及一个更普遍的问题。 我们正在尝试重试Wiremock的verify方法&#xff0c;该方法可能会在我们要检查的端点被命中之前由测试调用。 在这种情况下&#xff0c;我们希望在几秒钟后循环尝试一次&#xf…

漫画:什么是MapReduce

转载自 脑洞有点大的 程序员小灰什么是MapReduce&#xff1f;MapReduce是一种编程模型&#xff0c;其理论来自Google公司发表的三篇论文&#xff08;MapReduce&#xff0c;BigTable&#xff0c;GFS&#xff09;之一&#xff0c;主要应用于海量数据的并行计算。MapReduce可以分…

orelse_可选的orElse vs orElseGet

orelseJava 8引入了一个很棒的Optional概念&#xff0c;我们在博客Java 8 Optional中进行了研究 。 因此&#xff0c;为了简要说明一下&#xff0c;Optional用于表示Optional对象或空值&#xff0c;而不是null引用。 这将有助于避免在我们尝试对空引用对象执行某些操作时发生空…

jvm(6)-java类文件结构(字节码文件)

【0】README0.1&#xff09;本文部分文字描述转自 “深入理解jvm”&#xff0c;旨在学习类文件结构 的基础知识&#xff1b;0.2&#xff09;本文荔枝以及荔枝的分析均为原创&#xff1b;0.3&#xff09;下面的截图中有附注t*编号&#xff0c;不关乎博文内容&#xff1b;0.4&am…

你可能不知道的 10 条 SQL 技巧

转载自 58沈剑 开源中国 一、一些常见的SQL实践 &#xff08;1&#xff09;负向条件查询不能使用索引 select * from order where status!0 and stauts!1 not in/not exists都不是好习惯 可以优化为in查询&#xff1a; select * from order where status in(2,3) &#x…

夜神模拟器模拟安卓测试_使用模拟进行测试

夜神模拟器模拟安卓测试如果使用正确的方法&#xff0c;模拟对象将非常有用。 我在需要驱动软件开发使用的帖子中分享了一些使用Mock Objects的经验。 在这篇文章中&#xff0c;我分享了两件事 –使用模拟进行基于合同的测试。 –用于组织模拟代码的模式。 基于合同的测试 …

java记录类型_Java中的记录类型

java记录类型于2020年3月发布的JDK 14引入了记录 &#xff08;预览语言功能&#xff09;&#xff0c;该记录提供了一种紧凑的语法来声明主要用于保存数据的类。 在记录中 &#xff0c;所有低级&#xff0c;重复且容易出错的代码都类似于构造函数&#xff0c;访问器和通用方法&a…

代理模式(多线程实现状态监控)

【-1】README-1.1&#xff09;本文部分文字描述转自“head first 设计模式”&#xff0c;旨在学习 远程代理对象 的基础知识&#xff1b;-1.2&#xff09;多线程实现糖果自动售卖机监控程序为原创&#xff1b;-1.3&#xff09;博文最后&#xff0c;转载了代理模式的定义&#…

一篇文章搞定面试中的二叉树

转载自 IOExceptioner 算法与数据结构 在上一篇介绍二叉树&#xff08; Android面试题算法之二叉树 、红黑树详细分析&#xff0c;看了都说好&#xff09;&#xff0c;没看的读者建议先去了解了解&#xff0c;接下来再给大家带来一篇关于二叉树的文章。 最近总结了一些数据结…

清洁代码_清洁单元测试

清洁代码编写使用JUnit和某些模拟库的“单元测试”测试很容易。 即使测试甚至不是单元测试并提供可疑的价值&#xff0c;它们也可能产生使某些涉众满意的代码覆盖范围。 编写单元测试&#xff08;在理论上是单元测试&#xff0c;但是比基础代码更复杂&#xff09;因此也很容易编…

jvm(6)-Class字节码文件结构总结

【0】README 0.1&#xff09;本文总结于 Clas字节码文件&#xff0c;旨在理清 Class字节码文件的大体结构&#xff1b; 【1】干货开始 对上图的分析&#xff08;Analysis&#xff09;&#xff1a;A1&#xff09;offset0 A1.1&#xff09;头四个字节为CAFEBABE&#xff1a;表示…

Android面试题算法之二叉树

转载自 qing的世界 程序员小乐文章目录 前言二叉树的递归&#xff08;深度优先&#xff09;处理二叉树的层序处理(广度优先)总结“一、前言今年可谓是跌宕起伏的一年&#xff0c;幸好结局还算是圆满。开年的时候由于和公司CTO有过节&#xff0c;被"打入冷宫"&#…

java 读取 文本块_Java文本块

java 读取 文本块文本块是JDK增强建议&#xff08; JEP 355 &#xff09;&#xff0c;可以在JDK 13和14中用作预览语言功能。它计划在JDK 15中成为永久性功能。文本块是跨越多行并且不需要的String文字。对于大多数转义序列。 动机 在标准Java字符串中嵌入XML&#xff0c;JSON…

代理模式之虚拟代理(仅了解)

【0】README0.1&#xff09;本文全文转自 “head first 设计模式”&#xff0c;旨在了解 虚拟代理动态代理&#xff1b;0.2&#xff09;晚辈我 java.swing 烂到渣&#xff0c;没有写出干货荔枝&#xff0c;抱歉&#xff1b;【1】虚拟代理简述1&#xff09;远程代理&#xff1a;…

红黑树详细分析

转载自 coolblog 算法与数据结构“一、红黑树简介红黑树是一种自平衡的二叉查找树&#xff0c;是一种高效的查找树。它是由 Rudolf Bayer 于1972年发明&#xff0c;在当时被称为对称二叉 B 树(symmetric binary B-trees)。后来&#xff0c;在1978年被 Leo J. Guibas 和 Robert…

rest api如何创建_REST:创建资源

rest api如何创建资源创建是常见的REST API操作。 在这篇文章中&#xff0c;我们将看到如何创建单个资源。 客户要求 通常&#xff0c;通过将POST请求发送到父集合资源来创建资源。 这将使用新生成的ID创建一个新的下属资源。 例如&#xff0c;对/ projects的POST请求可用于在…

java字节码指令简介(仅了解)

【0】README0.1&#xff09;本文全文转自 “深入理解jvm”&#xff0c; 旨在了解 java字节码指令 的基础知识&#xff1b;【1】写在前面1&#xff09;由于jvm 采用面向操作数栈而不是寄存器的结构&#xff0c;所以大多数的指针都不包含操作数&#xff0c;只有一个操作码&#x…

什么是 CAS 机制

转载自 永远爱大家的 程序员小灰示例程序&#xff1a;启动两个线程&#xff0c;每个线程中让静态变量count循环累加100次。最终输出的count结果是什么呢&#xff1f;一定会是200吗&#xff1f;加了同步锁之后&#xff0c;count自增的操作变成了原子性操作&#xff0c;所以最终…

java xmpp_Java XMPP负载测试工具

java xmpp在本文中&#xff0c;我们将开发用Java编写的XMPP负载测试工具。 目录 1.简介 2. XMPP负载测试工具 3.先决条件 4. LoadXmppTest Java程序 4.1。 创建一个新的Maven项目 4.2。 创建主类 4.3。 XmppManager类 4.4。 建立 4.5。 负载测试 5.总结 6.参考 7.下载Maven项目…

jvm(7)-虚拟机类加载机制

【0】README0.1&#xff09;本文转自“深入理解jvm”&#xff0c;旨在学习 虚拟机类加载机制 的基础知识&#xff1b;【1】概述1&#xff09;类加载机制&#xff1a;虚拟机把描述类的数据从Class 文件加载到内存&#xff0c;并对数据进行校验&#xff0c;转换解析和初始化&…