Java查看class的JVM,指令集文件--javap -c ClassName


參考鏈接: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基本指令

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM