1. 程式人生 > >JVM加載.class文件的原理機制

JVM加載.class文件的原理機制

str 空間 引用 數據 系統 bootstra 開發人員 文件的 產生

當java編譯器將.java文件編譯成.class文件後,需要JVM執行.class文件,將class文件加載到內存中,從而對數據進行校驗、解析和初始化。

1、類加載的一般過程

(1)尋找jre目錄,尋找jvm.dll,並初始化JVM;

(2)產生一個Bootstrap Loader(啟動類加載器);

(3)Bootstrap Loader自動加載Extended Loader(標準擴展類加載器),並將其父Loader設為Bootstrap Loader。

(4)Bootstrap Loader自動加載AppClass Loader(系統類加載器),並將其父Loader設為Extended Loader。

(5)最後由AppClass Loader加載HelloWorld類。

2、類加載器(次部分參考csdn一些博客)

類加載器(class loader)用來把Java 類動態的加載到 Java 虛擬機中。也就是說當程序需要某個類時,類加載器就把這個類的二進行加入到虛擬機中。

Java 中的類加載器大致可以分成兩類,一類是系統提供的,另外一類則是由 Java 應用開發人員編寫的。系統提供的類加載器主要有下面三個:

(1)引導類加載器(bootstrap class loader):它用來加載 Java 的核心庫,是用原生代碼來實現的,並不繼承自 java.lang.ClassLoader

(2)擴展類加載器(extensions class loader):它用來加載 Java 的擴展庫。Java 虛擬機的實現會提供一個擴展庫目錄。該類加載器在此目錄裏面查找並加載 Java 類。

(3)系統類加載器(system class loader):它根據 Java 應用的類路徑(CLASSPATH)來加載 Java 類。一般來說,Java 應用的類都是由它來完成加載的。可以通過 ClassLoader.getSystemClassLoader()來獲取它。

3、加載類的過程

(1)裝載:查找和導入Class文件;

(2)鏈接:執行校驗、準備和解析步驟,其中解析步驟是可以選擇的:

  a) 校驗:檢查載入Class文件數據的正確性;

  b) 準備:給類的靜態變量分配存儲空間;

  c) 解析:將符號引用轉成直接引用;

(3)初始化:對類的靜態變量、靜態代碼塊執行初始化工作。

csdn一篇博文講的很好,地址如下http://blog.csdn.net/ns_code/article/details/17881581,,學習不錯的參考

JVM加載.class文件的原理機制