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

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

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
主站蜘蛛池模板: 日韩免费视频一区 | 91香蕉视频网址 | 美女gif跪趴式抽搐动态图 | 亚洲高清影院 | 欧美特级午夜一区二区三区 | 欧美成a人片免费看久久 | 情缘1完整版在线观看 | 俄罗斯毛片免费大全 | 好大好湿好硬好爽好深免费视频 | 千金肉奴隶免费观看 | 深夜免费在线视频 | 日韩性事 | 91次元成年破解版 | 秋霞黄色片 | 性xxxx欧美高清 | www.九九热 | 俄罗斯美女大逼 | 99九九成人免费视频精品 | 双性人bbww欧美双性 | 91精品久久 | 色婷婷婷丁香亚洲综合不卡 | 日本大乳护士的引诱图片 | 色中文 | 骚虎网站在线观看 | 五月天精品在线 | 国产精品怡红院永久免费 | 国产黄频 | 色多多幸福宝 | 91尤物在线| 国产免费一区二区三区 | 亚洲a视频在线 | 国产精品国产高清国产专区 | free性俄罗斯护士 | 精品国产麻豆免费人成网站 | 日本性生活大片 | 好男人影视社区www在线观看 | 青草午夜精品视频在线观看 | 国产99精品| 99热这里只有精 | 亚洲精品福利在线 | 人性本色 |