91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM指令有哪些

發布時間:2021-11-20 17:13:45 來源:億速云 閱讀:116 作者:小新 欄目:大數據

這篇文章主要為大家展示了“JVM指令有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“JVM指令有哪些”這篇文章吧。

1. 棧和局部變量操作

1.1 將常量壓入棧的指令

aconst_null 將null對象引用壓入棧
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 將一個8位帶符號整數壓入棧
sipush 將16位帶符號整數壓入棧
ldc 把常量池中的項壓入棧
ldc_w 把常量池中的項壓入棧(使用寬索引)
ldc2_w 把常量池中long類型或者double類型的項壓入棧(使用寬索引)

1.2 從棧中的局部變量中裝載值的指令

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 從數組中裝載int類型值
laload 從數組中裝載long類型值
faload 從數組中裝載float類型值
daload 從數組中裝載double類型值
aaload 從數組中裝載引用類型值
baload 從數組中裝載byte類型或boolean類型值
caload 從數組中裝載char類型值
saload 從數組中裝載short類型值

1.3 將棧中的值存入局部變量的指令

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類型值存入數組中
lastore 將long類型值存入數組中
fastore 將float類型值存入數組中
dastore 將double類型值存入數組中
aastore 將引用類型值存入數組中
bastore 將byte類型或者boolean類型值存入數組中
castore 將char類型值存入數組中
sastore 將short類型值存入數組中
wide指令
wide 使用附加字節擴展局部變量索引

1.4 通用(無類型)棧操作

nop 不做任何操作
pop 彈出棧頂端一個字長的內容
pop2 彈出棧頂端兩個字長的內容
dup 復制棧頂部一個字長內容
dup_x1 復制棧頂部一個字長的內容,然后將復制內容及原來彈出的兩個字長的內容壓入棧
dup_x2 復制棧頂部一個字長的內容,然后將復制內容及原來彈出的三個字長的內容壓入棧
dup2 復制棧頂部兩個字長內容
dup2_x1 復制棧頂部兩個字長的內容,然后將復制內容及原來彈出的三個字長的內容壓入棧
dup2_x2 復制棧頂部兩個字長的內容,然后將復制內容及原來彈出的四個字長的內容壓入棧
swap 交換棧頂部兩個字長內容

2. 類型轉換

i2l 把int類型的數據轉化為long類型
i2f 把int類型的數據轉化為float類型
i2d 把int類型的數據轉化為double類型
l2i 把long類型的數據轉化為int類型
l2f 把long類型的數據轉化為float類型
l2d 把long類型的數據轉化為double類型
f2i 把float類型的數據轉化為int類型
f2l 把float類型的數據轉化為long類型
f2d 把float類型的數據轉化為double類型
d2i 把double類型的數據轉化為int類型
d2l 把double類型的數據轉化為long類型
d2f 把double類型的數據轉化為float類型
i2b 把int類型的數據轉化為byte類型
i2c 把int類型的數據轉化為char類型
i2s 把int類型的數據轉化為short類型

3. 整數運算

iadd 執行int類型的加法
ladd 執行long類型的加法
isub 執行int類型的減法
lsub 執行long類型的減法
imul 執行int類型的乘法
lmul 執行long類型的乘法
idiv 執行int類型的除法
ldiv 執行long類型的除法
irem 計算int類型除法的余數
lrem 計算long類型除法的余數
ineg 對一個int類型值進行取反操作
lneg 對一個long類型值進行取反操作
iinc 把一個常量值加到一個int類型的局部變量上

4. 邏輯運算

4.1 移位操作

ishl 執行int類型的向左移位操作
lshl 執行long類型的向左移位操作
ishr 執行int類型的向右移位操作
lshr 執行long類型的向右移位操作
iushr 執行int類型的向右邏輯移位操作
lushr 執行long類型的向右邏輯移位操作

4.2 按位布爾運算

iand 對int類型值進行“邏輯與”操作
land 對long類型值進行“邏輯與”操作
ior 對int類型值進行“邏輯或”操作
lor 對long類型值進行“邏輯或”操作
ixor 對int類型值進行“邏輯異或”操作
lxor 對long類型值進行“邏輯異或”操作

4.3 浮點運算

fadd 執行float類型的加法
dadd 執行double類型的加法
fsub 執行float類型的減法
dsub 執行double類型的減法
fmul 執行float類型的乘法
dmul 執行double類型的乘法
fdiv 執行float類型的除法
ddiv 執行double類型的除法
frem 計算float類型除法的余數
drem 計算double類型除法的余數
fneg 將一個float類型的數值取反
dneg 將一個double類型的數值取反

5. 對象和數組

5.1 對象操作指令

new 創建一個新對象
checkcast 確定對象為所給定的類型
getfield 從對象中獲取字段
putfield 設置對象中字段的值
getstatic 從類中獲取靜態字段
putstatic 設置類中靜態字段的值
instanceof 判斷對象是否為給定的類型

5.2 數組操作指令

newarray 分配數據成員類型為基本上數據類型的新數組
anewarray 分配數據成員類型為引用類型的新數組
arraylength 獲取數組長度
multianewarray 分配新的多維數組

6. 控制流

6.1 條件分支指令

ifeq 如果等于0,則跳轉
ifne 如果不等于0,則跳轉
iflt 如果小于0,則跳轉
ifge 如果大于等于0,則跳轉
ifgt 如果大于0,則跳轉
ifle 如果小于等于0,則跳轉
if_icmpcq 如果兩個int值相等,則跳轉
if_icmpne 如果兩個int類型值不相等,則跳轉
if_icmplt 如果一個int類型值小于另外一個int類型值,則跳轉
if_icmpge 如果一個int類型值大于或者等于另外一個int類型值,則跳轉
if_icmpgt 如果一個int類型值大于另外一個int類型值,則跳轉
if_icmple 如果一個int類型值小于或者等于另外一個int類型值,則跳轉
ifnull 如果等于null,則跳轉
ifnonnull 如果不等于null,則跳轉
if_acmpeq 如果兩個對象引用相等,則跳轉
if_acmpnc 如果兩個對象引用不相等,則跳轉

6.2 比較指令

lcmp 比較long類型值
fcmpl 比較float類型值(當遇到NaN時,返回-1)
fcmpg 比較float類型值(當遇到NaN時,返回1)
dcmpl 比較double類型值(當遇到NaN時,返回-1)
dcmpg 比較double類型值(當遇到NaN時,返回1)

6.3 無條件轉移指令

goto 無條件跳轉
goto_w 無條件跳轉(寬索引)

6.4 表跳轉指令

tableswitch 通過索引訪問跳轉表,并跳轉
lookupswitch 通過鍵值匹配訪問跳轉表,并執行跳轉操作

6.5 異常

athrow 拋出異常或錯誤
finally子句
jsr 跳轉到子例程
jsr_w 跳轉到子例程(寬索引)
rct 從子例程返回

7. 方法調用與返回

7.1 方法調用指令

invokcvirtual 運行時按照對象的類來調用實例方法
invokespecial 根據編譯時類型來調用實例方法
invokestatic 調用類(靜態)方法
invokcinterface 調用接口方法

7.2 方法返回指令

ireturn 從方法中返回int類型的數據
lreturn 從方法中返回long類型的數據
freturn 從方法中返回float類型的數據
dreturn 從方法中返回double類型的數據
areturn 從方法中返回引用類型的數據
return 從方法中返回,返回值為void

7.3 線程同步

montiorenter 進入并獲取對象監視器
monitorexit 釋放并退出對象監視器

8. JVM指令助記符

變量到操作數棧:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_
操作數棧到變量:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstor_,astore,astore_
常數到操作數棧: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
余數:irem,lrem,frem,drem
取負:ineg,lneg,fneg,dneg
移位:ishl,lshr,iushr,lshl,lshr,lushr
按位或:ior,lor
按位與:iand,land
按位異或:ixor,lxor
類型轉換:i2l,i2f,i2d,l2f,l2d,f2d(放寬數值轉換)
i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(縮窄數值轉換)
創建類實便:new
創建新數組:newarray,anewarray,multianwarray
訪問類的域和類實例域:getfield,putfield,getstatic,putstatic
把數據裝載到操作數棧:baload,caload,saload,iaload,laload,faload,daload,aaload
從操作數棧存存儲到數組:bastore,castore,sastore,iastore,lastore,fastore,dastore,aastore
獲取數組長度:arraylength
檢相類實例或數組屬性:instanceof,checkcast
操作數棧管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap 有條件轉移: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
復合條件轉移:tableswitch,lookupswitch
無條件轉移:goto,goto_w,jsr,jsr_w,ret
調度對象的實便方法:invokevirtual
調用由接口實現的方法:invokeinterface
調用需要特殊處理的實例方法:invokespecial
調用命名類中的靜態方法:invokestatic
方法返回:ireturn,lreturn,freturn,dreturn,areturn,return
異常:athrow
finally關鍵字的實現使用:jsr,jsr_w,ret

以上是“JVM指令有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张家港市| 福清市| 三台县| 同江市| 开原市| 玉山县| 顺昌县| 临武县| 九江县| 凤城市| 邹城市| 武冈市| 缙云县| 平利县| 嵊州市| 许昌市| 黄平县| 龙海市| 淮滨县| 古丈县| 福贡县| 卓资县| 禹州市| 黑龙江省| 莆田市| 云和县| 成安县| 沁水县| 胶州市| 和林格尔县| 寿阳县| 房产| 盐津县| 寿光市| 顺平县| 吴旗县| 沅江市| 家居| 昭觉县| 阿拉善左旗| 安泽县|