這篇“Java類加載的過程是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java類加載的過程是什么”文章吧。
創新互聯公司服務項目包括紫金網站建設、紫金網站制作、紫金網頁制作以及紫金網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,紫金網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到紫金省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!
Java虛擬機屏蔽了與具體操作系統平臺相關的信息,這樣就促使Java程序只要在Java虛擬機上運行相關代碼,可以無需修改就在各種平臺上正常運行。
加載
在加載階段,就是講類class文件讀入內存,并為之創建一個java.lang.class對象。這個過程虛擬機主要完成三件事:
1.通過一個類的全限定名來獲取定義此類的二進制字節流。
2.將這個字節流所代表的靜態存儲結構轉化為方法區域的運行時數據結構。
3.在Java堆中生成一個代表這個類的java.lang.Class對象,作為方法區域數據的訪問入
驗證
驗證階段是鏈接的第一步,作用是保證Class文件的字節流包含的信息符合JVM規范,不會給JVM造成危害。如果驗證失敗,就會拋出一個java.lang.VerifyError異常或其子類異常。驗證過程分為四個階段
1.文件格式驗證:驗證字節流文件是否符合Class文件格式的規范,并且能被當前虛擬機正確的處理。
2.元數據驗證:是對字節碼描述的信息進行語義分析,以保證其描述的信息符合Java語言的規范。
3.字節碼驗證:主要是進行數據流和控制流的分析,保證被校驗類的方法在運行時不會危害虛擬機。
4.符號引用驗證:符號引用驗證發生在虛擬機將符號引用轉化為直接引用的時候,這個轉化動作將在解析階段中發生。
準備
準備階段為變量分配內存并設置類變量的初始化。在這個階段分配的僅為類的變量(static修飾的變量),而不包括類的實例變量。對已非final的變量,JVM會將其設置成“零值”,而不是其賦值語句的值:
pirvate static int size = 12;
那么在這個階段,size的值為0,而不是12。 final修飾的類變量將會賦值成真實的值。
解析
解析過程是將常量池內的符號引用替換成直接引用。主要包括四種類型引用的解析。類或接口的解析、字段解析、方法解析、接口方法解析。
初始化
在準備階段,類變量已經經過一次初始化了,在這個階段,則是根據程序員通過程序制定的計劃去初始化類的變量和其他資源。這些資源有static{}塊,構造函數,父類的初始化等。
至于使用和卸載階段階段,這里不再過多說明,使用過程就是根據程序定義的行為執行,卸載由GC完成。
使用
新線程---程序計數器----jvm棧執行(對象引用)-----堆內存(直接引用)----方法區。
卸載
GC垃圾回收。
雙親委派機制、意義、方法。
機制
啟動(Bootstrap)類加載器----->標準擴展(Extension)類加載器--->系統(System)類加載器---->上下文(Custom)類加載器 從左到右加載:首先將加載任務委托給父類加載器,依次遞歸,如果父類加載器可以完成類加載任務,就成功返回;只有父類加載器無法完成此加載任務時,才自己去加載。
意義
防止內存中出現多份同樣的字節碼
使用委托機制,會遞歸的向父類查找,如果類A中引用了類B,Java虛擬機將使用加載類A的類加載器去加載類B,如果A加載器已加載類A,那么B使用A的類加載器進行加載時,就不會在加載類A的字節碼了
方法
啟動(Bootstrap)類加載器
標準擴展(Extension)類加載器
應用程序類加載器(Application)
上下文(Custom)類加載器
以上就是關于“Java類加載的過程是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注創新互聯行業資訊頻道。
網站題目:Java類加載的過程是什么
轉載注明:http://m.newbst.com/article0/pjdioo.html
成都網站建設公司_創新互聯,為您提供標簽優化、品牌網站設計、商城網站、Google、網站設計公司、企業網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯