1. 程式人生 > >如何在dos命令中檢視class的jvm檔案

如何在dos命令中檢視class的jvm檔案

前幾天我看到這樣的一個問題,當時不是很清楚它的意思,所以執行一下看一下結果,

結果知道了以後想要看一下它是如何執行的,所以想要看一下編譯的class檔案,所以就有另外一下的操作

剛開始的時候直接查看了編譯好的class檔案,但是格式是真的看不懂,改了幾種編碼格式都難以閱讀,然後我聽 說可以在dos中檢視他的執行過程,這邊就試驗了一下;

這裡是輸出的執行的詳細內容javap -verbose className


然後需要僅僅是簡單的過程的話可以使用javap - c className


然後我們可以從這個編譯的過程中可以看出String的拼接是用了StringBuider的,因為String是final型別的所以new了一個StringBuider.這邊輸出比較的結果是地址,所以說這兩個不相等

然後看加了final的String,可以看出編譯的時候並沒有new一個StringBuilder,只是在字串常量池裡面的字串拼接

還有一些常用命令給你們用參考

命令選項   -help 輸出 javap 的幫助資訊。   -l 輸出行及區域性變量表。   -b 確保與 JDK 1.1 javap 的向後相容性。   -public 只顯示 public 類及成員。   -protected 只顯示 protected 和 public 類及成員。   -package 只顯示包、protected 和 public 類及成員。這是預設設定。   -private 顯示所有類和成員。
  -J[flag] 直接將 flag 傳給執行時系統。   -s 輸出內部型別簽名。   -c 輸出類中各方法的未解析的程式碼,即構成 Java 位元組碼的指令。   -verbose 輸出堆疊大小、各方法的 locals 及 args 數,以及class檔案的編譯版本   -classpath[路徑] 指定 javap 用來查詢類的路徑。如果設定了該選項,則它將覆蓋預設值或 CLASSPATH 環境變數。目錄用冒號分隔。    -bootclasspath[路徑] 指定載入自舉類所用的路徑。預設情況下,自舉類是實現核心 Java 平臺的類,位於 jrelib下面。

  -extdirs[dirs] 覆蓋搜尋安裝方式擴充套件的位置。擴充套件的預設位置是 jrelibext。

希望可以提出問題和建議,我們一起進步;