更新時間:2020年11月04日15時01分 來源:傳智播客 瀏覽次數(shù):
Java最初誕生的目的就是為了在不依賴于特定的物理硬件和操作系統(tǒng)環(huán)境下運行,那么也就是說Java程序?qū)崿F(xiàn)跨平臺特性的基石其實就是字節(jié)碼。Java之所以能夠解決程序的安全性問題、跨平臺移植性等問題,最主要的原因就是Java源代碼的編譯結(jié)果并非是本地機器指令,而是字節(jié)碼。當(dāng)Java源代碼成功編譯成字節(jié)碼后,如果想在不同的平臺上面運行,則無須再次編譯,也就是說Java源碼只需一次編譯就可處處運行,這就是“Write Once,Run Anywhere”的思想。所以注定了Java程序在任何物理硬件和操作系統(tǒng)環(huán)境下都能夠順利運行,只要對應(yīng)的平臺裝有特定的Java運行環(huán)境,Java程序都可以運行,雖然各個平臺的Java虛擬機內(nèi)部實現(xiàn)細(xì)節(jié)不盡相同,但是它們共同執(zhí)行的字節(jié)碼內(nèi)容卻是一樣的。
那么什么是字節(jié)碼(ByteCode)呢?參考《Java虛擬機規(guī)范Java SE7版》的描述來看,任何編程語言的編譯結(jié)果滿足并包含Java虛擬機的內(nèi)部指令集、符號表以及一些其他輔助信息,它就是一個有效的字節(jié)碼文件,就能夠被虛擬機所識別并裝載運行。在大部分情況下,字節(jié)碼更多是存儲在本地磁盤文件中,比如后綴名為“.class”的文件。每一個字節(jié)碼文件都對應(yīng)著全局唯一的一個類或者接口的定義信息,但這也并非絕對,類和接口并不一定都只能存儲在文件里,它還可以通過類裝載器直接在運行時生成。
字節(jié)碼結(jié)構(gòu)組成比較特殊,其內(nèi)部并不包含任何的分隔符區(qū)分段落,所以無論是字節(jié)順序、數(shù)量都是有嚴(yán)格規(guī)定的,所有16位、32位、64位長度的數(shù)據(jù)都將構(gòu)造成2個、4個和8個8位字節(jié)單位來表示,多字節(jié)數(shù)據(jù)項總是按照big-endian順序(高位字節(jié)在地址最低位,低位字節(jié)在地址最高位)來進行存儲。也就是說,一組8位字節(jié)單位的字節(jié)流組成了一個完整的字節(jié)碼文件。
猜你喜歡: