一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java虛擬機原理:類加載過程詳解

java虛擬機原理:類加載過程詳解

2021-12-24 12:07韓曙亮 Java教程

這篇文章主要介紹了Java中類加載過程全面解析,具有一定參考價值,需要的朋友可以了解下,希望能夠給你帶來幫助

一、Java 類加載過程

1、字節碼編譯

編寫好 Java 源碼 Student.java ,

使用 javac 將上述 Java 源碼編譯成 Class 字節碼文件 Student.class ,

2、加載

加載 : 通過 " 類加載子系統 " 將該字節碼文件 , 加載到 Java 虛擬機內存中 的 方法區 , 然后開始執行 " 連接 " 操作 ,

類加載時機 : Java 程序執行時 , 并不是一開始將所有的字節碼文件都加載到內存中 , 而是用到時才進行加載 ;

  • 通過 new 關鍵字創建實例對象 ;
  • 通過 Class 反射 獲取類 ;
  • 如 : Class.forName(“Xxx”) 獲取類 ;
  • 序列化 / 反序列化 ;
  • 調用 clone 克隆對象 ;
  • 有 main 函數的類 , 會默認自動加載 ;
  • 調用子類 , 如果之前沒有加載過父類 , 則 自動加載父類 ;

3、連接

連接操作 分為 3 3 3 個步驟 :

  • 驗證 : 對 字節碼文件 進行校驗 , 查看該字節碼格式是否正確 , 如 : 是否以 0xCAFEBABE 開頭 , 字段表 , 方發表 , 屬性表 等格式是否正確 , 進行校驗 ;
  • 校驗示例 : 假設校驗如下字節碼數據 , 原始數據是 【Java 虛擬機原理】Class 字節碼二進制文件分析 一 ( 字節碼文件附加信息 | 魔數 | 次版本號 | 主版本號 | 常量池個數 ) 二、字節碼文件示例 章節中的 Java 源碼 , Class 字節碼 , 字節碼附加信息 ;

在 Student 構造方法中 , 會調用到 1: invokespecial #1 父類構造方法 , 如果父類有有參的構造方法且沒有聲明無參構造方法 , 子類必須實現一個相同參數的構造方法 , 否則就會報錯 ;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Constant pool:
   #1 = Methodref          #4.#17         // java/lang/Object."<init>":()V
{
  public Student();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 1: 0
}
  • 準備 : 在該階段 , 在 方法區 中 , 為 類中的靜態變量 進行內存劃分 , 并對這些靜態變量進行 默認值賦值 , 一般賦值 0 , null 等默認值 ; 即使靜態變量 static int a = 5 已經有了賦值 , 但是在該階段暫時給該靜態變量賦值 0 ;
  • 解析 : 將 " 常量池 " 中的 " 符號引用 " 轉為 " 直接引用 " ;

符號引用 : 下面就是 常量池中的 符號引用 , 引用是 以符號的形式表示出來 的 , 這并不是內存中的引用 ; 直接引用 是 將 #1 = Methodref #4.#17 樣式的 符號引用 轉為 指向內存地址 的 指針引用 ; JVM 線程棧 的 棧幀 中的 動態鏈接 , 就是持有的一個指向內存的指針 , 該指針指向 棧幀 對應方法 在運行時 常量池中的 內存地址 ; 該內存地址是在 方法區 中的 ;

?
1
2
3
4
5
Constant pool:
   #1 = Methodref          #4.#17         // java/lang/Object."<init>":()V
   #2 = Fieldref           #3.#18         // Student.name:Ljava/lang/String;
   #3 = Class              #19            // Student
   #4 = Class              #20            // java/lang/Object

( 分析的數據是 【Java 虛擬機原理】Class 字節碼二進制文件分析 一 ( 字節碼文件附加信息 | 魔數 | 次版本號 | 主版本號 | 常量池個數 ) 二、字節碼文件示例 章節中的 Java 源碼 , Class 字節碼 , 字節碼附加信息 ; )

4、初始化

初始化 : 對變量進行 指定賦值 ;

如 : 有靜態變量 static int a = 5 , 在 連接 過程中的 準備 階段 , 為該變量賦值默認值 0 ; 在 初始化 階段 , 為其賦值 代碼 中設置的真正的 指定初始值 5 ;

總結

借助下圖理解類加載過程 ;

java虛擬機原理:類加載過程詳解

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的等多內容!

原文鏈接:https://blog.csdn.net/shulianghan/article/details/120126911

延伸 · 閱讀

精彩推薦
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
主站蜘蛛池模板: 美女被狂揉下部羞羞动漫 | 扒开老师挠尿口到崩溃刑罚 | 国产精品久久久久网站 | 亚洲视频免费在线观看 | tkvk视频| 91精品久久一区二区三区 | 四虎精品影视 | 成人亚洲精品一区 | 短篇同学新婚h系列小说 | 成人福利网 | 精品一区二区三区视频日产 | 国产九九视频在线观看 | 特级淫片大乳女子高清视频 | 成人免费公开视频 | 午夜桃色剧场 | 九九热视频免费 | 女上男下gifxxoo动态视频 | 欧美国产合集在线视频 | 麻豆网 | 四虎新网址| 鬼畜重口高h合集长短篇 | 乌克兰一级毛片9一18 | 免费看国产一级特黄aa大片 | 91精品国产美女福到在线不卡 | 国产一区二区三区欧美 | 久久精品国产亚洲AV蜜臀 | 国产精品视频网 | 欧美性bbbbbxxxxxddd | 成人精品亚洲人成在线 | 久久re这里精品在线视频7 | 美女被视频网站看免费入口 | 青青草原手机在线视频 | 久久精品无码一区二区日韩av | 色五月天天 | 黑人干我 | 国内揄拍国内精品久久 | 幻女free性zozo交体内谢 | 欧美日韩亚洲高清不卡一区二区三区 | 狠狠婷婷综合缴情亚洲 | 果冻传媒在线播放观看228集 | 被巨大黑人的翻白眼 |