程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java類加載根本進程

Java類加載根本進程

編輯:關於JAVA

Java類加載根本進程。本站提示廣大學習愛好者:(Java類加載根本進程)文章只能為提供參考,不一定能成為您想要的結果。以下是Java類加載根本進程正文


根本進程:  
  1. 依據類的全限定稱號加載定義類的二進制字節流。
  2. 將字節流代表的靜態存儲構造轉化為辦法區的運轉時數據構造
  3. 內存中生成一個代表這個類的java.lang.Class對象,作為辦法去這個類的各種數據訪問入口
  數組類自身不經過類加載器創立,由java虛擬機直接創立,數組類的元素類型由類加載器加載。 數組類的元素類型:數組去掉一切維度後的類型,   文件格式驗證:
  1. 0xCAFEBABY 魔數掃尾;
  2. 主次版本號以後虛擬機可處置;
  3. 常量類型;
  4. 索引執行類型;
  5. utf8編碼數據類型,
  元數據驗證:字節碼描繪信息語義剖析:
  1. 能否有父類;
  2. 父類能否承繼了final修飾的類;
  3. 非抽型類能否完成了父類或接口中需求完成的辦法;
  4. 類中的字段、辦法的掩蓋,重載矛盾;
  字節碼驗證:經過語義流及控制流剖析確定順序予以的合法性,正確性,辦法體剖析驗證。   符號援用驗證:虛擬機將符號援用轉化為直接援用時分,解析階段,對類本身以外信息停止婚配性驗證
  1. 符號援用中經過字符描繪的全限定名能否能找到對應的類;
  2. 指定類中能否存在契合辦法字段的描繪符,及復雜稱號所描繪的辦法和字段;
  3. 符號援用中類,字段,辦法的訪問性。
  預備:在辦法區中為類變量分配內存及設置類變量初始值。
  1. 初始值通常為數據類型的零值,final修飾的值直接初始化為相應值。
  2. 類變量為static修飾的變量,區分於實例變量。
  解析:虛擬機將常量池中的符號援用交換為直接援用進程 CONSTANT_Class_info,CONSTANT_Fieldref_info,CONSTANT_Methodref_info..
  1. 符號援用:以一組符號來描繪所援用的目的,任何方式的字面量,只需運用時能無歧義的定位到目的,,與虛擬機內存完成有關,有關援用目的能否加載。
  2. 直接援用:直接指向目的的指針,偏移量或直接定位到目的的句柄,和虛擬機完成的內存相關,直接援用相關的目的對象必需已加載。
  3. 。。。
  初始化:開端執行類定義中的Java順序代碼。執行類結構器<cinit>()辦法, <cinit>():
  1. 編譯器依據類文件中定義順序自動搜集類中的類變量的賦值舉措和靜態語句塊兒的語句兼並發生,靜態語句塊兒只能訪問到其前定義的變量。
  2. 區別於類的結構辦法,不需求顯示的調用父類結構器,虛擬機保證子類的<cinit>()執行之前父類的<cinit>()曾經執行完成。
  3. 父類中的靜態語句塊兒執行於前。
  4. <cinit>()關於類或接口不是必需的,假如沒有變量賦值操作或靜態語句塊兒,則不生成。
  5. 接口的<cinit>()不需求先執行父接口的<cinit>(),異樣接口的完成類<cinit>()也不需求。
  6. 線程平安:虛擬機保證多線程環境中<cinit>()正確的加鎖,同步,同一時間只能有一個線程訪問初始化類的<cinit>()
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved