Java虛擬機類加載機制--概述

1、虛擬機類概加載概述java

  虛擬機將描述類的Class文件加載到內存,並對數據進行校驗,轉換解析和初始化,最終造成能夠直接被虛擬機使用的Java類型數據結構

Java語言支持動態加載和動態鏈接。對象

2、虛擬機加載類的具體過程blog

  1.類加載總的流程繼承

  加載-->鏈接(驗證、準備、解析)-->初始化,須要注意的是每一個階段之間沒有徹底清晰的界限,一般是前一個階段執行到某處,就會觸發下接口

個階段的執行。內存

  2.類加載過程當中各步驟的具體任務虛擬機

  加載階段:須要完成3個任務。經過類名得到Class文件(注意:字節碼文件的來源能夠是任意的);將這個字節碼文件表明的靜態存儲結構轉換變量

爲方法區的運行時數據結構;在Java堆中生成一個表明該類字節碼文件的java.lang.Class文件的對象,該對象做爲程序訪問方法區數據的入口。擴展

注意:方法區的數據結構由虛擬機本身定義,加載階段與鏈接階段的部分是交叉進行的。

  驗證:驗證是鏈接的第一步,主要的目的是確保字節碼文件中的信息符合虛擬機的要求,而且不會對虛擬機形成傷害。不一樣的虛擬機對字節碼

文件的驗證可能會不一樣,主要分爲4部分的驗證:

  文件格式驗證:檢驗字節碼文件的格式規範,而且驗證是否能被當前版本的虛擬機處理。只有完成這部分驗證,字節碼文件才能進入方法區,

後面3個部分的驗證是基於方法區的驗證。

  元數據驗證:對字節碼的描述信息進行語義分析,確保描述信息符合Java語言規範。

  字節碼驗證:是整個驗證過程當中最複雜的部分,主要是對數據流和控制流的驗證,確保類的方法在運行的時候不會對虛擬機形成危害。

  符號引用驗證:這個階段發生在虛擬機將符合引用轉換爲直接引用的過程當中,這部分發生解析階段。這個階段的目的就是確保解析階段

能夠被正常的執行。

  準備:目的是對全部的類變量--靜態成員變量進行默認初始化。

  解析:將虛擬機常量池中的符號引用轉換爲直接引用的過程。分爲4類,類或接口的解析;字段的解析;類方法的解析、接口方法的解析

  初始化:執行字節碼文件定義的初始化。

3、類與類加載器

  類加載器:其實就是一段代碼用來實現類的加載,可是須要注意的是使用不一樣的類加載器加載,在堆中生成的Class對象是不相等的。

  類加載器的分類:啓動類加載器(屬於JVM的一部分)、擴展類加載器、應用程序類加載器,以及自定義的類加載器。一般應用程序的加載都是由這3種

  加載器配合一塊兒完成類的加載。

  類加載器的雙親委派模型:若是一個類加載器收到了類加載的親求,先傳給其上級的類加載器,看是否被加載過,每一級類加載器都是這樣操做

  上級類記載器沒加載過,本身又不想加載的時候,下級類加載器纔開始工做。注意:各級類加載器類之間的關係是組合關係,不是繼承。

相關文章
相關標籤/搜索