日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java虚拟机xadd指令学习

發(fā)布時(shí)間:2025/4/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java虚拟机xadd指令学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫一個(gè)小程序;

public class hello3 {public static void main(String[] args) { int a1 = 101;int a2 = 202;int a3 = a1 + a2;System.out.println(a3);} }

對class反匯編;

public class hello3 {public hello3();Code:0: aload_01: invokespecial #1 // Method java/lang/Object."<init>": ()V4: returnpublic static void main(java.lang.String[]);Code:0: bipush 1012: istore_13: sipush 2026: istore_27: iload_18: iload_29: iadd10: istore_311: getstatic #2 // Field java/lang/System.out:Ljava/ io/PrintStream;14: iload_315: invokevirtual #3 // Method java/io/PrintStream.printl n:(I)V18: return }

先看一下兩個(gè)push指令;

bipush
? ? 將一個(gè)byte類型數(shù)據(jù)入棧;
? ? 格式:bipush byte
? ? 將立即數(shù)byte帶符號擴(kuò)展為一個(gè)int類型的值value,然后將value入棧到操作數(shù)棧中;

bipush ? ?將單字節(jié)的常量值(-128~127)推送至棧頂
sipush ? ?將一個(gè)短整型常量值(-32768~32767)推送至棧頂

istore_<n>
? ? 將一個(gè)int類型數(shù)據(jù)保存到本地變量表中;
? ? <n>必須是一個(gè)指向當(dāng)前棧幀局部變量表的索引值;

先把101壓入操作數(shù)棧,然后保存到本地變量表;再對202進(jìn)行同樣操作;只是不了解為什么一個(gè)數(shù)用bipush,一個(gè)數(shù)用sipush;也許是隨機(jī)的,也許有原因;

之后執(zhí)行兩個(gè)iload指令,

?

iload_<n>
? ? 從局部變量表加載一個(gè)int類型值到操作數(shù)棧中;
? ? <n>代表一個(gè)當(dāng)前棧幀中局部變量表的索引值;

把兩個(gè)數(shù)放入操作數(shù)棧;

然后執(zhí)行iadd;也就是虛擬機(jī)中加法的時(shí)候,兩個(gè)數(shù)都是在操作數(shù)棧中;

加法指令:xadd
以上x=i,l,f,d分別表示int型、long型、float型、double型;

加完之后?istore_3,結(jié)果存到本地變量表;

然后getstatic;

然后iload_3,把結(jié)果放入操作數(shù)棧;

然后就是invokevirtual調(diào)用println方法輸出結(jié)果;

invokevirtual 虛擬機(jī)指令:用于調(diào)用對象的實(shí)例方法,根據(jù)對象的實(shí)際類型進(jìn)行分派(虛方法分派),這也是Java語言中最常見的方法分派方式;

?

總結(jié)

以上是生活随笔為你收集整理的java虚拟机xadd指令学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。