棧和局部變量操作
將常量壓入棧的指令
aconst_null 將null對(duì)象引用壓入棧
iconst_m1 將int類型常量-1壓入棧
iconst_0 將int類型常量0壓入棧
iconst_1 將int類型常量1壓入操作數(shù)棧
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)視器
JVM指令助記符 變量到操作數(shù)棧:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_ 操作數(shù)棧到變量: istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstor_,astore,astore_ 常數(shù)到操作數(shù)棧: bipush,sipush,ldc,ldc_w,ldc2_w,aconst_null,iconst_ml,iconst_,lconst_,fconst_,dconst_ 加:iadd,ladd,fadd,dadd
減:isub,lsub,fsub,dsub
乘:imul,lmul,fmul,dmul
除:idiv,ldiv,fdiv,ddiv
余數(shù):irem,lrem,frem,drem
取負(fù):ineg,lneg,fneg,dneg
移位:ishl,lshr,iushr,lshl,lshr,lushr
按位或:ior,lor
按位與:iand,land
按位異或:ixor,lxor
類型轉(zhuǎn)換:i2l,i2f,i2d,l2f,l2d,f2d(放寬數(shù)值轉(zhuǎn)換) i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(縮窄數(shù)值轉(zhuǎn)換)
創(chuàng)建類實(shí)便:new
創(chuàng)建新數(shù)組:newarray,anewarray,multianwarray 訪問類的域和類實(shí)例域:getfield,putfield,getstatic,putstatic 把數(shù)據(jù)裝載到操作數(shù)棧:baload,caload,saload,iaload,laload,faload,daload,aaload 從操作數(shù)棧存存儲(chǔ)到數(shù)組: bastore,castore,sastore,iastore,lastore,fastore,dastore,aastore 獲取數(shù)組長度:arraylength
檢相類實(shí)例或數(shù)組屬性:instanceof,checkcast 操作數(shù)棧管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap 有條件轉(zhuǎn)移:ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,if_icmpeq,if_icmpene, if_icmplt,if_icmpgt,if_icmple,if_icmpge,if_acmpeq,if_acmpne,lcmp,fcmpl fcmpg,dcmpl,dcmpg
復(fù)合條件轉(zhuǎn)移:tableswitch,lookupswitch
無條件轉(zhuǎn)移:goto,goto_w,jsr,jsr_w,ret
調(diào)度對(duì)象的實(shí)便方法:invokevirtual
調(diào)用由接口實(shí)現(xiàn)的方法:invokeinterface
調(diào)用需要特殊處理的實(shí)例方法:invokespecial
調(diào)用命名類中的靜態(tài)方法:invokestatic 方法返回:ireturn,lreturn,freturn,dreturn,areturn,return 異常:athrow
finally關(guān)鍵字的實(shí)現(xiàn)使用:jsr,jsr_w,ret
JVM指令手冊(cè)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門黑滴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憨募,“玉大人,你說我怎么就攤上這事跷跪〕诿” “怎么了特占?”我有些...
- 文/不壞的土叔 我叫張陵炫加,是天一觀的道長因妇。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮济舆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莺债。我一直安慰自己滋觉,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布齐邦。 她就那樣靜靜地躺著椎侠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪措拇。 梳的紋絲不亂的頭發(fā)上我纪,一...
- 文/蒼蘭香墨 我猛地睜開眼粘衬,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼荞估!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起色难,我...
- 序言:老撾萬榮一對(duì)情侶失蹤泼舱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后枷莉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡尺迂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年笤妙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片噪裕。...
- 正文 年R本政府宣布祭陷,位于F島的核電站苍凛,受9級(jí)特大地震影響趣席,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜醇蝴,卻給世界環(huán)境...
- 文/蒙蒙 一宣肚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悠栓,春花似錦霉涨、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至癞志,卻和暖如春往枷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背今阳。 一陣腳步聲響...
- 正文 我出身青樓墓臭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妖谴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窿锉,可洞房花燭夜當(dāng)晚...