Java虛擬機器——類檔案結構
一、Class檔案結構
Class檔案是一組以8個位元組為基礎單位的二進位制流,各個資料專案嚴格按照順序緊湊地排列在檔案中,中間沒有任何分隔符。根據《java虛擬機器規範》的規定,class檔案格式採用一種類似於C語言結構體的偽結構來儲存資料。偽結構中只有兩種資料型別:無符號數和表。
- 無符號數屬於基本資料型別,以u1、u2、u4、u8來分別代表1、2、4、8個位元組的無符號數。
- 表由多個無符號數或其他表作為資料項構成的複合資料型別。整個class檔案本質上也可以視為一張表。
class檔案具體內容包含魔數、版本號、常量池、訪問標誌、索引集合、欄位表集合、方法表集合、屬性表集合等資料。
魔數是class檔案的頭4個位元組,它唯一的作用是確定這個檔案是否是一個能夠被虛擬機器接受的class檔案。class檔案的魔數固定為0xCAFEBABE。
常量池相當於class檔案的資源倉庫,主要存放字面量和符號引用。
由於class檔案中方法、欄位等都需要引用CONSTANT_Utf8_info型常量來描述名稱,所以CONSTANT_Utf8_info型常量的最大長度也就是Java中方法、欄位名的最大長度,即u2型別最大值65535。所以Java中超過64KB英文字元的變數或方法名是無法編譯的。
二、位元組碼指令
java虛擬機器支援方法級的同步和方法內部一段指令序列的同步,這兩種同步結構都使用管程(Monitor,即通常所說的“鎖”)來實現。
方法級的同步是隱式的,不需要通過位元組碼指令控制,它實現在方法呼叫和返回操作之中。虛擬機器可以從方法常量池中的方法表結構中的ACC_SYNCHRONIZED訪問標誌得知一個方法是否被宣告為同步方法。呼叫方法時,呼叫指令檢查方法的ACC_SYNCHRONIZED訪問標誌是否被設定,如果設定了,執行執行緒就要求先成功持有管程,然後才能執行方法,最後方法完成時釋放管程。如果方法執行時遇到異常,且在方法內部無法處理,那這個同步方法所持有的管程將在異常拋到同步方法邊界之外時自動釋放。
同步一段指令集序列由synchronized語句塊表示,java虛擬機器指令集中有monitorenter和monitorexit兩條指令來支援synchronized關鍵字的語義。
相關文章
- Java虛擬機器,類檔案結構深度解析Java虛擬機
- Java虛擬機器之Class類檔案結構Java虛擬機
- 深入理解Java虛擬機器(類檔案結構)Java虛擬機
- 深入理解Java虛擬機器 – 類檔案結構Java虛擬機
- 深入學習Java虛擬機器——類檔案結構Java虛擬機
- 【深入Java虛擬機器】之二:Class類檔案結構Java虛擬機
- 類檔案結構——深入理解Java虛擬機器 筆記三Java虛擬機筆記
- 深入理解虛擬機器之類檔案結構虛擬機
- Java 虛擬機器之五:Java位元組碼檔案結構Java虛擬機
- 《深入理解java虛擬機器》學習筆記5——Java Class類檔案結構Java虛擬機筆記
- 《深入理解Java虛擬機器》讀書筆記3--類檔案結構Java虛擬機筆記
- [深入理解Java虛擬機器]第六章 Class類檔案的結構Java虛擬機
- Java虛擬機器內部結構Java虛擬機
- Java 虛擬機器之三:Java虛擬機器的記憶體結構Java虛擬機記憶體
- 《Java虛擬機器原理圖解》 1.1、class檔案基本組織結構Java虛擬機圖解
- 深入理解 python 虛擬機器:pyc 檔案結構Python虛擬機
- JVM虛擬機器Class類檔案研究分析JVM虛擬機
- 淺析Java虛擬機器結構與機制[轉]Java虛擬機
- java虛擬機器類載入機制Java虛擬機
- Java 虛擬機器類載入機制Java虛擬機
- Java虛擬機器10:類載入器Java虛擬機
- Java虛擬機器體系結構深入研究總結Java虛擬機
- Java虛擬機器9:Java類載入機制Java虛擬機
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- Java虛擬機器(六):類載入機制Java虛擬機
- Java虛擬機器 —— 類的載入機制Java虛擬機
- Java 虛擬機器之四:Java類載入機制Java虛擬機
- Java虛擬機器系列之Java記憶體結構簡介Java虛擬機記憶體
- java虛擬機器和Dalvik虛擬機器Java虛擬機
- Android 虛擬機器 Vs Java 虛擬機器Android虛擬機Java
- JAVA Class類檔案結構Java
- 《深入理解java虛擬機器》學習筆記7——Java虛擬機器類生命週期Java虛擬機筆記
- JVM(三)-java虛擬機器類載入機制JVMJava虛擬機
- 每日一問:你瞭解 Java 虛擬機器結構麼?Java虛擬機
- 面試準備之java虛擬機器記憶體結構面試Java虛擬機記憶體
- 《深入理解Java虛擬機器》個人讀書總結——JAVA虛擬機器記憶體Java虛擬機記憶體
- vmware虛擬機器與主機檔案共享虛擬機
- Java虛擬機器類載入的過程Java虛擬機