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)這樣的細節,都是被嚴格限定的,哪個字節代表什麼含義,長度是多少, 先後順序如何,全部都不允許改變。

三、Class文件發展歷史

Java技術能夠一直保持着非常良好的向後兼容性,Class文件結構的穩定功不可沒,任何一門程序 語言能夠獲得商業上的成功,都不可能去做升級版本後,舊版本編譯的產品就不再能夠運行這種事情。而Class文件的結構,絕大部分都是在第一版的《Java虛擬機規範》(1997年 發佈,對應於JDK 1.2時代的Java虛擬機)中就已經定義好的,內容雖然古老,但時至今日,Java發展經歷了十餘個大版本、無數小更新,那時定義的Class文件格式的各項細節幾乎沒有出現任何改變。盡 管不同版本的《Java虛擬機規範》對Class文件格式進行了幾次更新,但基本上只是在原有結構基礎上 新增內容、擴充功能,並未對已定義的內容做出修改。

四、Java虛擬機實現語言的無關性

參考資料:

  1. https://blog.csdn.net/IT_GJW/article/details/80447947
  2. https://blog.csdn.net/cold___play/article/details/105325698
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章