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


當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,,學習不錯的參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM