更新時間:2020年11月04日15時01分 來源:傳智播客 瀏覽次數(shù):
Java最初誕生的目的就是為了在不依賴于特定的物理硬件和操作系統(tǒng)環(huán)境下運(yùn)行,那么也就是說Java程序?qū)崿F(xiàn)跨平臺特性的基石其實(shí)就是字節(jié)碼。Java之所以能夠解決程序的安全性問題、跨平臺移植性等問題,最主要的原因就是Java源代碼的編譯結(jié)果并非是本地機(jī)器指令,而是字節(jié)碼。當(dāng)Java源代碼成功編譯成字節(jié)碼后,如果想在不同的平臺上面運(yùn)行,則無須再次編譯,也就是說Java源碼只需一次編譯就可處處運(yùn)行,這就是“Write Once,Run Anywhere”的思想。所以注定了Java程序在任何物理硬件和操作系統(tǒng)環(huán)境下都能夠順利運(yùn)行,只要對應(yīng)的平臺裝有特定的Java運(yùn)行環(huán)境,Java程序都可以運(yùn)行,雖然各個平臺的Java虛擬機(jī)內(nèi)部實(shí)現(xiàn)細(xì)節(jié)不盡相同,但是它們共同執(zhí)行的字節(jié)碼內(nèi)容卻是一樣的。
那么什么是字節(jié)碼(ByteCode)呢?參考《Java虛擬機(jī)規(guī)范Java SE7版》的描述來看,任何編程語言的編譯結(jié)果滿足并包含Java虛擬機(jī)的內(nèi)部指令集、符號表以及一些其他輔助信息,它就是一個有效的字節(jié)碼文件,就能夠被虛擬機(jī)所識別并裝載運(yùn)行。在大部分情況下,字節(jié)碼更多是存儲在本地磁盤文件中,比如后綴名為“.class”的文件。每一個字節(jié)碼文件都對應(yīng)著全局唯一的一個類或者接口的定義信息,但這也并非絕對,類和接口并不一定都只能存儲在文件里,它還可以通過類裝載器直接在運(yùn)行時生成。
字節(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ù)項(xiàng)總是按照big-endian順序(高位字節(jié)在地址最低位,低位字節(jié)在地址最高位)來進(jìn)行存儲。也就是說,一組8位字節(jié)單位的字節(jié)流組成了一個完整的字節(jié)碼文件。
猜你喜歡:
ZooKeeper在集群Master選舉中應(yīng)用介紹
2020-10-30Java培訓(xùn)機(jī)構(gòu)學(xué)費(fèi)一般要多少錢?近期java學(xué)習(xí)趨勢
2020-10-30Zookeeper如何實(shí)現(xiàn)集群管理?
2020-10-30zookeeper命名服務(wù)詳細(xì)介紹【新版】
2020-10-30哈爾濱Java程序開發(fā)培訓(xùn)價(jià)格要多少錢?看完不上當(dāng)!
2020-10-30Zookeeper之Publish/Subscribe(發(fā)布/訂閱)模式
2020-10-30北京校區(qū)