Java字節(jié)碼與CPU機器碼

目錄

字節(jié)碼

Java字節(jié)碼和二進制文件

字節(jié)碼文件、反編譯和解析

機器碼

字節(jié)碼

Java字節(jié)碼和二進制文件

Java字節(jié)碼文件(.class):對Java源文件(.java)編譯后生成的二進制文件。二進制文件不單單包含只由0、1二進制組成的文件,還包括四、八、十六進職等。Java字節(jié)碼文件是十六進制的二進制文件。

字節(jié)碼文件、反編譯和解析

對字節(jié)碼文件反編譯后會生成類似Java源文件(.java)的代碼,idea自帶反編譯功能,所以點擊class文件可以直接閱讀。

真正的class文件如下

使用Binary Viewer可以打開

起始內(nèi)容為CafeBaby,稱之為魔術(shù)(magicnumber),所有能被jvm識別的字節(jié)碼文件都必須使用CafeBaby作為起始內(nèi)容。

javap命令:大多數(shù)人認為javap是反編譯,其實是一種對字節(jié)碼的解析。參考oracle的官方說明

意思是說對class文件進行反匯編。

三種方式解析字節(jié)碼:

控制臺輸入javap -v ***.class

安裝jclasslib bytecode viewer

idea安裝jclasslib bytecode插件

解析結(jié)果如下

這個文件與上述反編譯文件的不同在于,它詳細解釋了jvm對代碼的執(zhí)行流程,例如何時從內(nèi)存讀出數(shù)據(jù),何時把新方法壓入棧。而反編譯的類java文件還是從邏輯角度出發(fā),是你編寫代碼時的邏輯順序(即原始java文件)。

機器碼

CPU機器碼

只有CPU能夠讀懂的一組0、1二進制數(shù),jvm對字節(jié)碼轉(zhuǎn)譯后才會變成機器碼,java的跨平臺性就體現(xiàn)在不依賴CPU等具體硬件,一切底層依賴交給jvm處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容