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

Java 動態加載機制、類加載器體系與 JDK/JRE 深度剖析

     編輯:Java 相關知識

學習 Java 兩年,記錄避坑指南供同好參考。本篇覆蓋三大基石:動態加載驗證、類文件尋找原理、JDK 與 JRE 關係。

一、 親眼見證動態加載

概念易記,細節難悟。命令行執行:

java -verbose:class YourClass

控制台將打印所有加載類的順序。觀察可發現:聲明類變量不實例化,類不加載;只有真正用到對象(new、靜態方法/字段)時才觸發加載。這就是「動態加載」的鐵證。

二、 類文件尋找原理:雙親委派模型

初學堅持用命令行 javac/java -classpath,而非依賴 IDE。classpath 告訴編譯器/運行時去哪找 .class。JVM 依賴 ClassLoader,分三級(由高到低):

  1. Bootstrap ClassLoader(C++ 實現,無 Java 對應):加載 jre/lib/rt.jar 等核心庫,優先級最高。
  2. Extension ClassLoader:加載 jre/lib/ext 目錄擴展庫。
  3. Application ClassLoader:加載 classpath 指定路徑(默認當前目錄)。

尋找遵循「向上委派」:當前級找不到才向父級請求,不向下搜索。驗證方法:

new A().getClass().getClassLoader().toString()

打印 null 表示由 Bootstrap 加載。此機制由華人工程師宮力設計(JDK 1.4~1.6 細節有變,以官方文檔為準)。理解此點,排查 ClassNotFoundException/NoClassDefFoundError 將得心應手。

三、 JDK 與 JRE:不只是安裝目錄的區別

建議同時安裝 JDK 內置 JRE 與獨立 JRE,對比目錄結構:

  • JRE = JVM (jre/bin/client/jvm.dll) + 類庫 (jre/lib/rt.jar)。僅供運行。
  • JDK = 開發工具 (javac、jar 等) + 另一套完整 JRE(含 client 與 server 兩種 JVM 模式)。

關鍵發現:環境變量 PATH 配 jdk/bin,但執行 java 命令實際調用的是 jre/bin/java.exe!實驗:剪切 jdk/bin/java.exe 後運行程序無影響。原因:安裝獨立 JRE 時,安裝程序自動將 java.exe 複製到 %SystemRoot%\system32(系統目錄在 PATH 最前),系統優先調用它。這也是為了讓無需開發的用戶免配置即能運行 Java 程序。

除非調試 JVM 參數差異,建議直接使用系統 JRE 運行,視為「客戶端環境驗證」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved