首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JVM 學習筆記(一):類加載、內存模型、數據類型、引用機制

     編輯:Java 相關知識

1. 編譯與運行流程

.java → (編譯器) → .class → (類加載器) → 方法區 → (執行引擎) → 運行
  • 一個 .java 含多少類,編譯產出多少 .class(內部類不計)。
  • 一個 .class 僅包含一個類或接口。

2. 底層訪問雙通道

  1. 標準路徑:Java API → 本地方法 → 底層系統(跨平台)。
  2. 捷徑:直接調用本地方法(平台相關,JNI)。

3. 雙親委派類加載器體系

  • 啟動類加載器:唯一、C++ 實現、虛擬機一部分、加載核心庫(rt.jar)。
  • 用戶自定義加載器:Java 實現、可多實例、屬應用程序一部分。

委派機制

  1. 請求向上委派至啟動加載器。
  2. 父加載器無法加載則下推給子加載器。
  3. 每個加載器維護獨立命名空間,同一命名空間類可互訪,隔離不同空間。

4. JVM 生命週期

每個 Java 程序擁有獨立 JVM 實例,隨程序啟動/退出而生滅。

5. 運行時內存區域劃分

區域核心職責線程共享性
方法區類元數據、常量池、靜態變量、方法字節碼共享
堆對象實例、數組、實例變量共享
Java 棧棧幀(局部變量、操作數棧、幀數據區)、方法調用狀態私有
本地方法棧Native 方法調用狀態(如 C 棧)私有

棧幀結構

  • 局部變量表:字長數組,索引訪問。非靜態方法隱含 this 參數(索引 0)。
  • 操作數棧:棧式操作,指令執行工作區(如 iadd 彈出相加壓入結果)。
  • 幀數據區:常量池解析、異常處理、返回地址。

6. Java 數據類型體系

  • 基本類型:byte/short/int/long/char/float/double/boolean(int/char 可互換)。
  • 引用類型:類、接口、數組。

7. 引用 vs 指針

  • 引用:對象代表,無內存佔用、不可修改、可為 null。
  • 指針:存儲地址的變量,可修改、佔用內存。

8. 方法區線程安全

共享前提下,每個類被設置為臨界資源,同一時刻僅允許單線程訪問。

9. 類唯一標識

類全限定名 + 定義該類的加載器實例 = 唯一標識(同一類可被不同加載器加載至不同命名空間)。

10. 對象模型與動態綁定

  • 實例變量在堆,符號引用在常量池/方法表。
  • 調用方法需動態綁定:根據對象實際類型(而非引用類型)在運行時確定方法版本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved