Java 虛擬機(JVM)作為 Java 生態的基石,其架構設計直接決定了 Java 程序的運行效率與跨平台能力。本文系統梳理 JVM 支持的數據類型、類文件格式特徵,以及五大運行時數據區的職能與交互,為後續深入理解棧幀、執行引擎、垃圾收集奠定基礎。
.class 文件(不強制要求物理文件存在)| 分類 | 類型 | 備註 |
|---|---|---|
| 原始類型 | byte/short/int/long | 有符號整數 |
| float/double | IEEE 754 浮點數 | |
| char | 16 位 Unicode 字符 | |
| boolean | JVM 內部以 int 表示(1=true, 0=false) | |
| returnAddress | JVM 專有,指向字節碼指令地址,供 jsr/ret 指令使用 | |
| 引用類型:類實例、數組、null | ||
baload/bastore(按 byte 處理)iadd/ladd/fadd/dadd)JVM 定義六大數據區,按生存期分類:
| 區域 | 核心職能 | 異常 |
|---|---|---|
| 堆 | 所有對象實例、數組分配區;GC 主戰場 | OutOfMemoryError |
| 方法區 | 類結構、常量池、方法代碼、靜態字段;邏輯上屬堆一部分 | OutOfMemoryError |
| 運行時常量池 | 類文件常量池的運行時表示;含字面量、符號引用;類加載時創建 | OutOfMemoryError |
| 區域 | 核心職能 | 異常 |
|---|---|---|
| PC 寄存器 | 當前執行指令地址;native 方法值未定義 | — |
| JVM 棧 | 棧幀容器;存儲局部變量、操作數棧、返回地址;支撐方法調用/返回 | StackOverflowError / OutOfMemoryError |
| 本地方法棧 | 支援 native 方法調用;C 棧等傳統棌實現 | StackOverflowError / OutOfMemoryError |
JVM 通過統一類文件格式實現跨平台,以分層運行時數據區支撐並發執行與內存管理。理解數據類型映射、數據區職能劃分、對象引用模型,是掌握類加載機制、執行引擎、GC 算法的前提。下篇將深入棧幀結構,揭示方法調用的微觀運作。