??個人主頁: ?? 葉落閑庭
??我的專欄:??
c語言
數(shù)據(jù)結(jié)構(gòu)
javaEE
操作系統(tǒng)
Redis
石可破也,而不可奪堅;丹可磨也,而不可奪赤。
一、字節(jié)碼文件的組成部分
- 操作數(shù)棧是臨時存放數(shù)據(jù)的地方
- 局部變量表是存放方法中的局部變量的位置
觀察如下代碼的字節(jié)碼文件
int i = 0;
int j = i + 1;
具體的java源代碼:
public static void main(String[] args) {
int i = 0;
int j = i + 1;
}
要想看到java的字節(jié)碼文件的內(nèi)容,可以通過jclasslib這個工具來看,運行以上代碼,然后通過jclasslib可以看到在這個方法中變量的存放位置,其中,局部變量表數(shù)組的0索引位置存放的是main方法的參數(shù) args ,1索引位置存放的是第一個變量 i ,2索引存放的是第二個變量 j ,可以看出,定義在方法中的變量,方法的參數(shù)也將作為這個方法的變量存入局部變量表中,定義在方法內(nèi)的變量會按定義的先后順序依次存入局部變量表中。
接下來解析這段代碼的字節(jié)碼文件:
- iconst_0:將常量0放入到操作數(shù)棧中
- istore_1:將操作數(shù)棧中的值取出放入局部變量表索引為1的位置
- iload_1:將局部變量表索引為1的位置的值復制一份放入到操作數(shù)棧中
- iconst_1:將常量1放入到操作數(shù)棧中
- iadd:將操作數(shù)棧中最上面的兩個值相加,并把結(jié)果存放在棧中
- istore_2:將操作數(shù)棧中的值取出放入局部變量表索引為2的位置
- return:方法結(jié)束,返回
1.1 iconst_0
1.2 istore_1
1.3 iload_1
1.4 iconst_1
1.5 iadd
1.6 istore_2
1.7 return
二、執(zhí)行i++ 操作
- 源代碼:
public static void main(String[] args) {
int i = 0;
i++;
}
- 字節(jié)碼:
-
iconst_0:將常量0放入操作數(shù)棧中
-
istore_1:將操作數(shù)棧中的值取出放入索引為1的局部變量表中
-
iinc 1 by 1:在局部變量表索引為1的位置增加1
-
return:方法結(jié)束,返回
2.1 iconst_0
2.2 istore_1
2.3 iinc 1 by 1
根據(jù)JVM規(guī)范,iinc就是通過一個常量遞增局部變量
2.4 return
文章來源:http://www.zghlxwxcb.cn/news/detail-717326.html
三、字節(jié)碼常用工具:javap -v命令
javap是JDK自帶的反編譯工具,可以通過控制臺查看字節(jié)碼文件的內(nèi)容。
適合在服務器上查看字節(jié)碼文件內(nèi)容。
直接輸入javap查看所有參數(shù)。
輸入javap-v字節(jié)碼文件名稱查看具體的字節(jié)碼信息。(如果jar包需要先使用jar-vf命令解壓)文章來源地址http://www.zghlxwxcb.cn/news/detail-717326.html
到了這里,關(guān)于【JVM】字節(jié)碼文件的組成部分的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!