您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關JVM虛擬機中Class文件的簡介是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
class文件全名稱為Java class文件,class文件徑打破了C或者C++等語言所遵循的傳統,當編譯和連接一個C++程序時,所獲得的可執行二進制文件只能在指定的硬件平臺和操作系統上運行,因為這個二進制文件包含了對目標處理器的機器語言。
而Java程序(class文件)并不是本地的可執行程序。當運行Java程序時,首先運行JVM(Java虛擬機),也就是在計算機上再虛擬一個計算機,它存在于計算機內存中并運行在操作系統之上的,然后再把Java class加載到JVM里運行。
因此Java class文件是可以運行在任何支持Java虛擬機的硬件平臺和操作系統上的二進制文件,實現了“一次編寫、處處運行”。
Class文件是一組以8位字節為基礎單位的二進制流,各個數據項目嚴格按照順序緊湊地排列在Class文件之中,中間沒有添加任何分隔符。根據Java虛擬機規范的規定,Class文件結構采用一種類似于C語言結構體的偽結構來存儲數據,這種偽結構只有兩種數據類型:無符號數和表。
無符號數屬于基本的數據類型,以u1、u2、u4、u8來表示1個字節、2個字節、4個字節和8個字節的無符號數,無符號數可以用來描述數字、索引引用、數量值或者按照UTF-8編碼構成的字符串值。
表是由多個無符號數或者其他表作為數據項構成的符合數據類型,所有表都習慣性地以“_info”結尾。表用于描述有層次關系的復合結構的數據,整個class文件就是一張表 ,它由下表所示的數據項構成。
無論是無符號數還是表,當需要描述同一類型但數量不定的多個數據時,經常會使用一個前置的容量計數器加若干個連續的數據項的形式,這時候稱這一系列連續的某一類型的數據為某一類型的“集合”。
需要強調的是,Class的結構不像xml等描述語言,由于它沒有任何分隔符號,所以上表中的數據項,無論是順序還是數量,甚至于數據存儲的字節序(Byte Ordering,Class 文件中字節序為Big-Endian)這樣的細節,都是被嚴格限定的,哪個字節代表什么含義,長度是多少, 先后順序如何,全部都不允許改變。
Java技術能夠一直保持著非常良好的向后兼容性,Class文件結構的穩定功不可沒,任何一門程序 語言能夠獲得商業上的成功,都不可能去做升級版本后,舊版本編譯的產品就不再能夠運行這種事情。而Class文件的結構,絕大部分都是在第一版的《Java虛擬機規范》(1997年 發布,對應于JDK 1.2時代的Java虛擬機)中就已經定義好的,內容雖然古老,但時至今日,Java發展經歷了十余個大版本、無數小更新,那時定義的Class文件格式的各項細節幾乎沒有出現任何改變。盡 管不同版本的《Java虛擬機規范》對Class文件格式進行了幾次更新,但基本上只是在原有結構基礎上 新增內容、擴充功能,并未對已定義的內容做出修改。
看完上述內容,你們對JVM虛擬機中Class文件的簡介是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。