參考鏈接:https://blog.csdn.net/zhangpan19910604/article/details/52254053
該文章主要分為兩部分 一:查看JVM文件 二:解釋文件
我們知道.java文件經過編譯器編譯后會生成.class文件,JVM其實運行的是.class文件,這里復雜了,暫不做解釋,只需要知道,JVM實際對代碼的實際執行順序,和我們看到.class文件並不完全一致,
那,怎么看JVM文件呢,很easy啦,一個命令就搞定:javap -c ClassName,
給個Demo
public class Demo { public static void main(String[] args) { int m = 3; int n = 4; int sum = m + n; System.out.println(sum); } }
想不想看JVM到底運行這段demo的?
想就告訴你呀
一:查看JVM文件--切換到指定路徑
方法一:cmd,打開dos窗口,然后cd到Demo.class所在的位置,

方法二:或者呢,在Demo.class所在位置,-->shift+鼠標右擊 -->在此處打開命令窗口

方法一和二目的一樣,切換到,Demo.class所在路徑,畢竟第二種省事,用第二種吧
二:輸入命令 javap -c Demo.class(反編譯命令)

對上邊的命令解釋一波吧
如果沒有接觸過數據結構,好像難理解點 0: iconst_3 //int型常量3進棧 1: istore_1 //將棧頂值存入第二個局部變量,從0開始計數 2: iconst_4 //int型常量4進棧(4后入棧,那4肯定是棧頂元素了) 3: istore_2 //將棧頂值存入第三個局部變量 4: iload_1 //第二個局部變量(這里就是3)進棧 5: iload_2 //第三個局部變量(這里就是4)進棧 6: iadd //將棧頂兩int數值相加,並且進棧 7: istore_3 //將棧頂值(3+4的結果在上一步入棧,所以此時棧頂值是7)存入第四個局部變量 8: getstatic #2 //獲取java/lang/System.out:Ljava/io/PrintStream的靜態域,並將其值壓入棧頂 11: iload_3 //第四個局部變量(這里就是7)進棧 12: invokevirtual #3 //調用實例方法 java/io/PrintStream.println 15: return //當前方法返回void
附件:JVM基本指令

