深入Java編程:Java的位元組代碼

來源:互聯網
上載者:User

Java程式員很少注意程式的編譯結果。事實上,Java的位元組代碼向我們提供了 非常有價值的資訊。特別是在調試排除Java效能問題時,編譯結果讓我們可以更 深入地理解如何提高程式執行的效率等問題。其實JDK使我們研究Java位元組代碼變 得非常容易。本文闡述怎樣利用JDK中的工具查看解釋Java位元組代碼,主要包含以 下方面的一些內容:

l Java類分解器——javap

l Java位元組代碼是怎樣使程式 避免程式的記憶體錯誤

l 怎樣通過分析位元組代碼來提高程式的執行效率

l 利用第三方工具反編譯Java位元組代碼

一、Java類分解器 ——javap

大多數Java程式員知道他們的程式不是編譯成本機 代碼的。實際上,程式被編譯成中間位元組代碼,由Java虛擬機器來解釋執行。然而 ,很少程式員注意一下位元組代碼,因為他們使用的工具不鼓勵他們這樣做。大多 數的Java調試工具不允許單步的位元組代碼調試。這些工具要麼顯示原始碼,要麼 什麼都不顯示。

幸好JDK提供了Java類分解器javap,一個命令列工具。 javap對類名給定的檔案(.class)提供的位元組代碼進行反編譯,列印出這些類的 一個可讀版本。在預設情況下,javap列印出給定類內的公用域、方法、建構函式 ,以及靜態初始值。

1.javap的具體用法

文法: javap <選項 > <類名>...

其中選項包括:

參數 含義
b 向後相容JDK 1.1中的 javap
c 反編譯代碼,列印出每個給定類中方法的 Java虛擬機器指令。使用該選項後,將對包括私人及受保護方法在內的所有方法進 行反編譯
classpath <pathlist> 指明到哪裡 尋找使用者的類檔案。這個選項值覆蓋了缺少路徑以及由CLASSPATH環境變數定義的 路徑。此處給出的路徑是一個目錄及zip檔案有序列表,其元素在Unix中以 “:”,在Windows中以“;”分隔。要想在不覆蓋預設系統 類路徑的情況下增加一些要尋找的目錄或zip檔案,應使用CLASSPATH環境變數, 使用方法與編譯器的-classpath相同。
extdirs <dirs> 覆蓋安裝擴充目錄
help 顯示協助資訊
J<flag> 將<flag>直接傳遞給運行系 統
l  在原來列印資訊的基礎上,增加行號和局部 變數表
public 只顯示公用類及其成員
protected 顯示受保護/公用類及其成員
package 顯示包受保護/公用類及其成員(預設)
private 顯示所有類及其成員
s 列印內部類型標記
bootclasspath <pathlist> 覆蓋由引導類加 載器載入的類檔案位置
verbose 列印堆棧大小,方 法的局部變數和參數的數目。若可驗證,列印出錯原因

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.