JVM字节码
棧和局部變量操作?
將常量壓入棧的指令?aconst_null ? ?將null對(duì)象引用壓入棧?
iconst_m1 ? ? ?將int類型常量-1壓入棧?
iconst_0???????? 將int類型常量0壓入棧?
iconst_1???????? 將int類型常量1壓入棧?
iconst_2???????? 將int類型常量2壓入棧?
iconst_3???????? 將int類型常量3壓入棧?
iconst_4???????? 將int類型常量4壓入棧?
iconst_5???????? 將int類型常量5壓入棧?
lconst_0???????? 將long類型常量0壓入棧?
lconst_1???????? 將long類型常量1壓入棧?
fconst_0???????? 將float類型常量0壓入棧?
fconst_1???????? 將float類型常量1壓入棧?
dconst_0???????? 將double類型常量0壓入棧?
dconst_1???????? 將double類型常量1壓入棧?
bipush???????????? 將一個(gè)8位帶符號(hào)整數(shù)壓入棧?
sipush???????????? 將16位帶符號(hào)整數(shù)壓入棧?
ldc ? ? ? ? ? ? ? ? ? 把常量池中的項(xiàng)壓入棧?
ldc_w ? ? ? ? ? ? ? 把常量池中的項(xiàng)壓入棧(使用寬索引)?
ldc2_w???????????? 把常量池中l(wèi)ong類型或者double類型的項(xiàng)壓入棧(使用寬索引)?
從棧中的局部變量中裝載值的指令?
iload ? ? ? ? ? ? ? ? 從局部變量中裝載int類型值?
lload ? ? ? ? ? ? ? ? 從局部變量中裝載long類型值?
fload ? ? ? ? ? ? ? ? 從局部變量中裝載float類型值?
dload ? ? ? ? ? ? ? ?從局部變量中裝載double類型值?
aload ? ? ? ? ? ? ? ?從局部變量中裝載引用類型值(refernce)?
iload_0???????????? 從局部變量0中裝載int類型值?
iload_1???????????? 從局部變量1中裝載int類型值?
iload_2???????????? 從局部變量2中裝載int類型值?
iload_3???????????? 從局部變量3中裝載int類型值?
lload_0???????????? 從局部變量0中裝載long類型值?
lload_1???????????? 從局部變量1中裝載long類型值?
lload_2???????????? 從局部變量2中裝載long類型值?
lload_3???????????? 從局部變量3中裝載long類型值?
fload_0???????????? 從局部變量0中裝載float類型值?
fload_1???????????? 從局部變量1中裝載float類型值?
fload_2???????????? 從局部變量2中裝載float類型值?
fload_3???????????? 從局部變量3中裝載float類型值?
dload_0???????????? 從局部變量0中裝載double類型值?
dload_1???????????? 從局部變量1中裝載double類型值?
dload_2???????????? 從局部變量2中裝載double類型值?
dload_3???????????? 從局部變量3中裝載double類型值?
aload_0???????????? 從局部變量0中裝載引用類型值?
aload_1???????????? 從局部變量1中裝載引用類型值?
aload_2???????????? 從局部變量2中裝載引用類型值?
aload_3???????????? 從局部變量3中裝載引用類型值?
iaload ? ? ? ? ? ? ? ?從數(shù)組中裝載int類型值?
laload ? ? ? ? ? ? ? ?從數(shù)組中裝載long類型值?
faload ? ? ? ? ? ? ? ?從數(shù)組中裝載float類型值?
daload ? ? ? ? ? ? ? 從數(shù)組中裝載double類型值?
aaload ? ? ? ? ? ? ? 從數(shù)組中裝載引用類型值?
baload ? ? ? ? ? ? ? 從數(shù)組中裝載byte類型或boolean類型值?
caload ? ? ? ? ? ? ? 從數(shù)組中裝載char類型值?
saload ? ? ? ? ? ? ? 從數(shù)組中裝載short類型值?
將棧中的值存入局部變量的指令?
istore ? ? ? ? ? ? ? 將int類型值存入局部變量?
lstore ? ? ? ? ? ? ? 將long類型值存入局部變量?
fstore ? ? ? ? ? ? ? 將float類型值存入局部變量?
dstore ? ? ? ? ? ? ?將double類型值存入局部變量?
astore ? ? ? ? ? ? ?將將引用類型或returnAddress類型值存入局部變量?
istore_0 ? ? ? ? ? 將int類型值存入局部變量0?
istore_1 ? ? ? ? ? 將int類型值存入局部變量1?
istore_2 ? ? ? ? ? 將int類型值存入局部變量2?
istore_3???????? 將int類型值存入局部變量3?
lstore_0???????? 將long類型值存入局部變量0?
lstore_1???????? 將long類型值存入局部變量1?
lstore_2???????? 將long類型值存入局部變量2?
lstore_3???????? 將long類型值存入局部變量3?
fstore_0???????? 將float類型值存入局部變量0?
fstore_1???????? 將float類型值存入局部變量1?
fstore_2???????? 將float類型值存入局部變量2?
fstore_3???????? 將float類型值存入局部變量3?
dstore_0???????? 將double類型值存入局部變量0?
dstore_1???????? 將double類型值存入局部變量1?
dstore_2???????? 將double類型值存入局部變量2?
dstore_3???????? 將double類型值存入局部變量3?
astore_0???????? 將引用類型或returnAddress類型值存入局部變量0?
astore_1???????? 將引用類型或returnAddress類型值存入局部變量1?
astore_2???????? 將引用類型或returnAddress類型值存入局部變量2?
astore_3???????? 將引用類型或returnAddress類型值存入局部變量3?
iastore???????????? 將int類型值存入數(shù)組中?
lastore???????????? 將long類型值存入數(shù)組中?
fastore???????????? 將float類型值存入數(shù)組中?
dastore???????????? 將double類型值存入數(shù)組中?
aastore???????????? 將引用類型值存入數(shù)組中?
bastore???????????? 將byte類型或者boolean類型值存入數(shù)組中?
castore???????????? 將char類型值存入數(shù)組中?
sastore???????????? 將short類型值存入數(shù)組中?
wide指令?
wide???????????? 使用附加字節(jié)擴(kuò)展局部變量索引?
通用(無類型)棧操作?
nop???????????? 不做任何操作?
pop???????????? 彈出棧頂端一個(gè)字長的內(nèi)容?
pop2???????????? 彈出棧頂端兩個(gè)字長的內(nèi)容?
dup???????????? 復(fù)制棧頂部一個(gè)字長內(nèi)容?
dup_x1???????????? 復(fù)制棧頂部一個(gè)字長的內(nèi)容,然后將復(fù)制內(nèi)容及原來彈出的兩個(gè)字長的內(nèi)容壓入棧?
dup_x2???????????? 復(fù)制棧頂部一個(gè)字長的內(nèi)容,然后將復(fù)制內(nèi)容及原來彈出的三個(gè)字長的內(nèi)容壓入棧?
dup2 ? ? ? ? ? ? ? ?復(fù)制棧頂部兩個(gè)字長內(nèi)容?
dup2_x1 ? ? ? ? ? 復(fù)制棧頂部兩個(gè)字長的內(nèi)容,然后將復(fù)制內(nèi)容及原來彈出的三個(gè)字長的內(nèi)容壓入棧?
dup2_x2 ? ? ? ? ? 復(fù)制棧頂部兩個(gè)字長的內(nèi)容,然后將復(fù)制內(nèi)容及原來彈出的四個(gè)字長的內(nèi)容壓入棧?
swap ? ? ? ? ? ? ? ?交換棧頂部兩個(gè)字長內(nèi)容?
類型轉(zhuǎn)換?
i2l ? ? ? ? ? ? ?把int類型的數(shù)據(jù)轉(zhuǎn)化為long類型?i2f ? ? ? ? ? ? ?把int類型的數(shù)據(jù)轉(zhuǎn)化為float類型?
i2d???????????? 把int類型的數(shù)據(jù)轉(zhuǎn)化為double類型?
l2i ? ? ? ? ? ? ?把long類型的數(shù)據(jù)轉(zhuǎn)化為int類型?
l2f ? ? ? ? ? ? ?把long類型的數(shù)據(jù)轉(zhuǎn)化為float類型?
l2d???????????? 把long類型的數(shù)據(jù)轉(zhuǎn)化為double類型?
f2i ? ? ? ? ? ? ?把float類型的數(shù)據(jù)轉(zhuǎn)化為int類型?
f2l ? ? ? ? ? ? ?把float類型的數(shù)據(jù)轉(zhuǎn)化為long類型?
f2d???????????? 把float類型的數(shù)據(jù)轉(zhuǎn)化為double類型?
d2i???????????? 把double類型的數(shù)據(jù)轉(zhuǎn)化為int類型?
d2l???????????? 把double類型的數(shù)據(jù)轉(zhuǎn)化為long類型?
d2f???????????? 把double類型的數(shù)據(jù)轉(zhuǎn)化為float類型?
i2b???????????? 把int類型的數(shù)據(jù)轉(zhuǎn)化為byte類型?
i2c???????????? 把int類型的數(shù)據(jù)轉(zhuǎn)化為char類型?
i2s???????????? 把int類型的數(shù)據(jù)轉(zhuǎn)化為short類型?
整數(shù)運(yùn)算?
iadd???????????? 執(zhí)行int類型的加法?ladd???????????? 執(zhí)行l(wèi)ong類型的加法?
isub???????????? 執(zhí)行int類型的減法?
lsub???????????? 執(zhí)行l(wèi)ong類型的減法?
imul???????????? 執(zhí)行int類型的乘法?
lmul???????????? 執(zhí)行l(wèi)ong類型的乘法?
idiv???????????? 執(zhí)行int類型的除法?
ldiv???????????? 執(zhí)行l(wèi)ong類型的除法?
irem???????????? 計(jì)算int類型除法的余數(shù)?
lrem???????????? 計(jì)算long類型除法的余數(shù)?
ineg???????????? 對(duì)一個(gè)int類型值進(jìn)行取反操作?
lneg???????????? 對(duì)一個(gè)long類型值進(jìn)行取反操作?
iinc???????????? 把一個(gè)常量值加到一個(gè)int類型的局部變量上?
邏輯運(yùn)算? 移位操作?
ishl???????????? 執(zhí)行int類型的向左移位操作?
lshl???????????? 執(zhí)行l(wèi)ong類型的向左移位操作?
ishr???????????? 執(zhí)行int類型的向右移位操作?
lshr???????????? 執(zhí)行l(wèi)ong類型的向右移位操作?
iushr???????????? 執(zhí)行int類型的向右邏輯移位操作?
lushr???????????? 執(zhí)行l(wèi)ong類型的向右邏輯移位操作?
按位布爾運(yùn)算?
iand???????????? 對(duì)int類型值進(jìn)行“邏輯與”操作?
land???????????? 對(duì)long類型值進(jìn)行“邏輯與”操作?
ior???????????? 對(duì)int類型值進(jìn)行“邏輯或”操作?
lor???????????? 對(duì)long類型值進(jìn)行“邏輯或”操作?
ixor???????????? 對(duì)int類型值進(jìn)行“邏輯異或”操作?
lxor???????????? 對(duì)long類型值進(jìn)行“邏輯異或”操作?
浮點(diǎn)運(yùn)算?
fadd???????????? 執(zhí)行float類型的加法?
dadd???????????? 執(zhí)行double類型的加法?
fsub???????????? 執(zhí)行float類型的減法?
dsub???????????? 執(zhí)行double類型的減法?
fmul???????????? 執(zhí)行float類型的乘法?
dmul???????????? 執(zhí)行double類型的乘法?
fdiv???????????? 執(zhí)行float類型的除法?
ddiv???????????? 執(zhí)行double類型的除法?
frem???????????? 計(jì)算float類型除法的余數(shù)?
drem???????????? 計(jì)算double類型除法的余數(shù)?
fneg???????????? 將一個(gè)float類型的數(shù)值取反?
dneg???????????? 將一個(gè)double類型的數(shù)值取反?
對(duì)象和數(shù)組?
對(duì)象操作指令?new???????????? 創(chuàng)建一個(gè)新對(duì)象?
checkcast???????? 確定對(duì)象為所給定的類型?
getfield???????? 從對(duì)象中獲取字段?
putfield???????? 設(shè)置對(duì)象中字段的值?
getstatic???????? 從類中獲取靜態(tài)字段?
putstatic???????? 設(shè)置類中靜態(tài)字段的值?
instanceof???????? 判斷對(duì)象是否為給定的類型?
數(shù)組操作指令?
newarray???????? 分配數(shù)據(jù)成員類型為基本上數(shù)據(jù)類型的新數(shù)組?
anewarray???????? 分配數(shù)據(jù)成員類型為引用類型的新數(shù)組?
arraylength???????? 獲取數(shù)組長度?
multianewarray???????? 分配新的多維數(shù)組?
控制流?
條件分支指令?ifeq???????????? 如果等于0,則跳轉(zhuǎn)?
ifne???????????? 如果不等于0,則跳轉(zhuǎn)?
iflt???????????? 如果小于0,則跳轉(zhuǎn)?
ifge???????????? 如果大于等于0,則跳轉(zhuǎn)?
ifgt???????????? 如果大于0,則跳轉(zhuǎn)?
ifle???????????? 如果小于等于0,則跳轉(zhuǎn)?
if_icmpcq???????? 如果兩個(gè)int值相等,則跳轉(zhuǎn)?
if_icmpne???????? 如果兩個(gè)int類型值不相等,則跳轉(zhuǎn)?
if_icmplt???????? 如果一個(gè)int類型值小于另外一個(gè)int類型值,則跳轉(zhuǎn)?
if_icmpge???????? 如果一個(gè)int類型值大于或者等于另外一個(gè)int類型值,則跳轉(zhuǎn)?
if_icmpgt???????? 如果一個(gè)int類型值大于另外一個(gè)int類型值,則跳轉(zhuǎn)?
if_icmple???????? 如果一個(gè)int類型值小于或者等于另外一個(gè)int類型值,則跳轉(zhuǎn)?
ifnull???????????? 如果等于null,則跳轉(zhuǎn)?
ifnonnull???????? 如果不等于null,則跳轉(zhuǎn)?
if_acmpeq???????? 如果兩個(gè)對(duì)象引用相等,則跳轉(zhuǎn)?
if_acmpnc???????? 如果兩個(gè)對(duì)象引用不相等,則跳轉(zhuǎn)?
比較指令?
lcmp???????????? 比較long類型值?
fcmpl???????????? 比較float類型值(當(dāng)遇到NaN時(shí),返回-1)?
fcmpg???????????? 比較float類型值(當(dāng)遇到NaN時(shí),返回1)?
dcmpl???????????? 比較double類型值(當(dāng)遇到NaN時(shí),返回-1)?
dcmpg???????????? 比較double類型值(當(dāng)遇到NaN時(shí),返回1)?
無條件轉(zhuǎn)移指令?
goto???????????? 無條件跳轉(zhuǎn)?
goto_w???????????? 無條件跳轉(zhuǎn)(寬索引)?
表跳轉(zhuǎn)指令?
tableswitch???????? 通過索引訪問跳轉(zhuǎn)表,并跳轉(zhuǎn)?
lookupswitch???????? 通過鍵值匹配訪問跳轉(zhuǎn)表,并執(zhí)行跳轉(zhuǎn)操作?
異常?
athrow???????????? 拋出異常或錯(cuò)誤?
finally子句?
jsr???????????? 跳轉(zhuǎn)到子例程?
jsr_w???????????? 跳轉(zhuǎn)到子例程(寬索引)?
rct???????????? 從子例程返回?
方法調(diào)用與返回?
方法調(diào)用指令?
invokcvirtual???????? 運(yùn)行時(shí)按照對(duì)象的類來調(diào)用實(shí)例方法?
invokespecial???????? 根據(jù)編譯時(shí)類型來調(diào)用實(shí)例方法?
invokestatic???????? 調(diào)用類(靜態(tài))方法?
invokcinterface???????? 調(diào)用接口方法?
方法返回指令?
ireturn???????????? 從方法中返回int類型的數(shù)據(jù)?
lreturn???????????? 從方法中返回long類型的數(shù)據(jù)?
freturn???????????? 從方法中返回float類型的數(shù)據(jù)?
dreturn???????????? 從方法中返回double類型的數(shù)據(jù)?
areturn???????????? 從方法中返回引用類型的數(shù)據(jù)?
return???????????? 從方法中返回,返回值為void?
線程同步?
montiorenter???????? 進(jìn)入并獲取對(duì)象監(jiān)視器?
monitorexit???????? 釋放并退出對(duì)象監(jiān)視器
from:?http://blog.csdn.net/kobejayandy/article/details/40720323
總結(jié)
- 上一篇: 22种代码味道(Martin Fowle
- 下一篇: 了解CMS(Concurrent Mar