欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java類加載基本過程詳細介紹

 更新時間:2016年12月14日 17:27:29   投稿:lqh  
這篇文章主要介紹了Java類加載基本過程詳細介紹的相關(guān)資料,需要的朋友可以參考下

Java類加載基本過程詳細介紹

基本過程:

  • 根據(jù)類的全限定名稱加載定義類的二進制字節(jié)流。
  • 將字節(jié)流代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運行時數(shù)據(jù)結(jié)構(gòu)
  • 內(nèi)存中生成一個代表這個類的java.lang.Class對象,作為方法去這個類的各種數(shù)據(jù)訪問入口

 數(shù)組類本身不通過類加載器創(chuàng)建,由java虛擬機直接創(chuàng)建,數(shù)組類的元素類型由類加載器加載。
數(shù)組類的元素類型:數(shù)組去掉所有維度后的類型, 

文件格式驗證:

  1. 0xCAFEBABY 魔數(shù)開頭;
  2. 主次版本號當(dāng)前虛擬機可處理;
  3. 常量類型;
  4. 索引執(zhí)行類型;
  5. utf8編碼數(shù)據(jù)類型,

元數(shù)據(jù)驗證:字節(jié)碼描述信息語義分析:

  1. 是否有父類;
  2. 父類是否繼承了final修飾的類;
  3. 非抽型類是否實現(xiàn)了父類或接口中需要實現(xiàn)的方法;
  4. 類中的字段、方法的覆蓋,重載矛盾;

 字節(jié)碼驗證:通過語義流及控制流分析確定程序予以的合法性,正確性,方法體分析驗證。

  1. 符號引用驗證:虛擬機將符號引用轉(zhuǎn)化為直接引用時候,解析階段,對類自身以外信息進行匹配性驗證
  2. 符號引用中通過字符描述的全限定名是否能找到對應(yīng)的類;
  3. 指定類中是否存在符合方法字段的描述符,及簡單名稱所描述的方法和字段;
  4. 符號引用中類,字段,方法的訪問性。

準(zhǔn)備:在方法區(qū)中為類變量分配內(nèi)存及設(shè)置類變量初始值。

  1. 初始值通常為數(shù)據(jù)類型的零值,final修飾的值直接初始化為相應(yīng)值。
  2. 類變量為static修飾的變量,區(qū)分于實例變量。

 解析:虛擬機將常量池中的符號引用替換為直接引用過程

CONSTANT_Class_info,CONSTANT_Fieldref_info,CONSTANT_Methodref_info..

  1. 符號引用:以一組符號來描述所引用的目標(biāo),任何形式的字面量,只要使用時能無歧義的定位到目標(biāo),,與虛擬機內(nèi)存實現(xiàn)無關(guān),無關(guān)引用目標(biāo)是否加載。
  2. 直接引用:直接指向目標(biāo)的指針,偏移量或間接定位到目標(biāo)的句柄,和虛擬機實現(xiàn)的內(nèi)存相關(guān),直接引用相關(guān)的目標(biāo)對象必須已加載。
  3. 。。。

初始化:開始執(zhí)行類定義中的Java程序代碼。執(zhí)行類構(gòu)造器<cinit>()方法,

<cinit>():

  1. 編譯器根據(jù)類文件中定義順序自動收集類中的類變量的賦值動作和靜態(tài)語句塊兒的語句合并產(chǎn)生,靜態(tài)語句塊兒只能訪問到其前定義的變量。
  2. 區(qū)別于類的構(gòu)造方法,不需要顯示的調(diào)用父類構(gòu)造器,虛擬機保證子類的<cinit>()執(zhí)行之前父類的<cinit>()已經(jīng)執(zhí)行完成。
  3. 父類中的靜態(tài)語句塊兒執(zhí)行于前。
  4. <cinit>()對于類或接口不是必須的,如果沒有變量賦值操作或靜態(tài)語句塊兒,則不生成。
  5. 接口的<cinit>()不需要先執(zhí)行父接口的<cinit>(),同樣接口的實現(xiàn)類<cinit>()也不需要。
  6. 線程安全:虛擬機保證多線程環(huán)境中<cinit>()正確的加鎖,同步,同一時間只能有一個線程訪問初始化類的<cinit>()

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Spring?Boot面試必問之啟動流程知識點詳解

    Spring?Boot面試必問之啟動流程知識點詳解

    SpringBoot是Spring開源組織下的子項目,是Spring組件一站式解決方案,主要是簡化了使用Spring的難度,簡省了繁重的配置,提供了各種啟動器,開發(fā)者能快速上手,這篇文章主要給大家介紹了關(guān)于Spring?Boot面試必問之啟動流程知識點的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • springboot連接sqllite遇到的坑及解決

    springboot連接sqllite遇到的坑及解決

    這篇文章主要介紹了springboot連接sqllite遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 一文詳解Mybatis-plus的介紹與使用

    一文詳解Mybatis-plus的介紹與使用

    Mybatis-Plus?是?MyBatis?的一個增強工具,專門針對于傳統(tǒng)MyBatis開發(fā)中sql需要手動進行映射配置繁瑣缺點的一款框架技術(shù)。本文將為大家詳細講講Mybatis-plus的介紹與使用,感興趣的可以了解一下
    2022-07-07
  • Java 按行讀取文件按行寫入文件并以空格分割字符串的方法

    Java 按行讀取文件按行寫入文件并以空格分割字符串的方法

    今天小編就為大家分享一篇Java 按行讀取文件按行寫入文件并以空格分割字符串的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Java實現(xiàn)拓撲排序算法的示例代碼

    Java實現(xiàn)拓撲排序算法的示例代碼

    在圖論中,拓撲排序(Topological Sorting)是一個有向無環(huán)圖(DAG, Directed Acyclic Graph)的所有頂點的線性序列。本文將為大家講講拓撲排序算法的原理及實現(xiàn),需要的可以參考一下
    2022-07-07
  • SpringBoot上傳文件大小受限問題的解決辦法

    SpringBoot上傳文件大小受限問題的解決辦法

    最近有一次由于項目升級發(fā)現(xiàn)了一個上傳方面的問題,下面這篇文章主要給大家介紹了關(guān)于SpringBoot上傳文件大小受限問題的解決辦法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 初識Java8中的Stream

    初識Java8中的Stream

    lambda表達式是stream的基礎(chǔ),接下來通過實例代碼給大家詳細介紹java8中的stream,感興趣的朋友一起看看吧
    2017-08-08
  • 基于Java實現(xiàn)音樂播放器的示例代碼

    基于Java實現(xiàn)音樂播放器的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Java編寫一個簡單的音樂播放器,文中的示例代碼講解詳細,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下
    2023-07-07
  • Spring TransactionalEventListener事務(wù)未提交讀取不到數(shù)據(jù)的解決

    Spring TransactionalEventListener事務(wù)未提交讀取不到數(shù)據(jù)的解決

    這篇文章主要介紹了Spring TransactionalEventListener事務(wù)未提交讀取不到數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot創(chuàng)建監(jiān)聽器的方法示例

    SpringBoot創(chuàng)建監(jiān)聽器的方法示例

    在Java中,監(jiān)聽器(Listener)是一種設(shè)計模式,它允許對象在 特定事件 發(fā)生時 自動執(zhí)行某些操作,這種設(shè)計模式通常用于實現(xiàn) 發(fā)布-訂閱模型,本文給大家介紹了SpringBoot創(chuàng)建監(jiān)聽器的方法示例,感興趣的通過可以參考一下
    2024-04-04

最新評論