最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年09月09日 08:43:43   作者:韓曙亮  
這篇文章主要介紹了Java中類加載過程全面解析,具有一定參考價值,需要的朋友可以了解下,希望能夠給你帶來幫助

一、Java 類加載過程

1、字節(jié)碼編譯

編寫好 Java 源碼 Student.java ,

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

2、加載

加載 : 通過 " 類加載子系統(tǒng) " 將該字節(jié)碼文件 , 加載到 Java 虛擬機內(nèi)存中 的 方法區(qū) , 然后開始執(zhí)行 " 連接 " 操作 ,

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

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

3、連接

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

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

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

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
}
  • 準備 : 在該階段 , 在 方法區(qū) 中 , 為 類中的靜態(tài)變量 進行內(nèi)存劃分 , 并對這些靜態(tài)變量進行 默認值賦值 , 一般賦值 0 , null 等默認值 ; 即使靜態(tài)變量 static int a = 5 已經(jīng)有了賦值 , 但是在該階段暫時給該靜態(tài)變量賦值 0 ;
  • 解析 : 將 " 常量池 " 中的 " 符號引用 " 轉(zhuǎn)為 " 直接引用 " ;

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

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

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

4、初始化

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

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

總結(jié)

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

在這里插入圖片描述

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的等多內(nèi)容!

相關文章

  • Java中的RestTemplate使用詳解

    Java中的RestTemplate使用詳解

    這篇文章主要介紹了Java中的RestTemplate使用詳解,Spring內(nèi)置了RestTemplate作為Http請求的工具類,簡化了很多操作,雖然Spring5推出了WebClient,但是整體感覺還是RestTemplate用起來更簡單方便一些,需要的朋友可以參考下
    2023-10-10
  • java算法入門之有效的括號刪除有序數(shù)組中的重復項實現(xiàn)strStr

    java算法入門之有效的括號刪除有序數(shù)組中的重復項實現(xiàn)strStr

    大家好,我是哪吒,一個熱愛編碼的Java工程師,本著"欲速則不達,欲達則欲速"的學習態(tài)度,在程序猿這條不歸路上不斷成長,所謂成長,不過是用時間慢慢擦亮你的眼睛,少時看重的,年長后卻視若鴻毛,少時看輕的,年長后卻視若泰山,成長之路,亦是漸漸放下執(zhí)念,內(nèi)心歸于平靜的旅程
    2021-08-08
  • SpringBoot項目中@RestControllerAdvice全局異常失效問題的解決

    SpringBoot項目中@RestControllerAdvice全局異常失效問題的解決

    @RestController注解是一個用于定義RESTful Web服務的控制器的特殊注解,它是@Controller和@ResponseBody注解的結(jié)合體,意味著你不需要在每個處理請求的方法上都添加@ResponseBody,本文給大家介紹了解決SpringBoot項目中@RestControllerAdvice全局異常失效問題
    2024-11-11
  • Spring lazy-init 懶加載的原理小結(jié)

    Spring lazy-init 懶加載的原理小結(jié)

    lazy-init 是一個非常重要的屬性,可以優(yōu)化應用的啟動時間,尤其是在處理大量bean或者復雜依賴關系時,可以顯著提高應用的響應速度,本文主要介紹了Spring lazy-init 懶加載的原理小結(jié),感興趣的可以了解一下
    2025-04-04
  • java程序員常見的sql錯誤

    java程序員常見的sql錯誤

    當Java程序員在SQL中要寫個查詢語句是很簡單的。但在Java里類似的語句卻不容易,因為程序員不僅要反復考慮編程范式,而且也要考慮算法的問題。下面我們來看看這幾個常見的錯誤吧
    2019-06-06
  • java 直接調(diào)用python腳本,并傳遞參數(shù)代碼實例

    java 直接調(diào)用python腳本,并傳遞參數(shù)代碼實例

    這篇文章主要介紹了java調(diào)用python腳本傳遞參數(shù)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • java合并list方法代碼實例

    java合并list方法代碼實例

    這篇文章主要介紹了java合并list方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • JAVA實現(xiàn)簡單搶紅包算法(模擬真實搶紅包)

    JAVA實現(xiàn)簡單搶紅包算法(模擬真實搶紅包)

    這篇文章主要介紹了JAVA實現(xiàn)簡單搶紅包算法(模擬真實搶紅包)的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • Java字符流和字節(jié)流對文件操作的區(qū)別

    Java字符流和字節(jié)流對文件操作的區(qū)別

    本篇文章主要介紹了Java的IO流分為字符流(Reader,Writer)和字節(jié)流(InputStream,OutputStream),字節(jié)流顧名思義字節(jié)流就是將文件的內(nèi)容讀取到字節(jié)數(shù)組,對初學者很有用,有需要的朋友可以了解一下。
    2016-10-10
  • java基礎入門之IO流

    java基礎入門之IO流

    流是一種抽象概念,它代表了數(shù)據(jù)的無結(jié)構化傳遞。。用來進行輸入輸出操作的流就稱為IO流。換句話說,IO流就是以流的方式進行輸入輸出
    2021-06-06

最新評論

章丘市| 普兰店市| 汉中市| 龙海市| 台湾省| 浦县| 台北市| 泾源县| 镇江市| 忻州市| 南和县| 同江市| 文水县| 通州市| 福州市| 承德市| 普洱| 岳普湖县| 屯留县| 牙克石市| 昌平区| 固原市| 大足县| 台州市| 崇文区| 呈贡县| 六枝特区| 远安县| 天柱县| 清远市| 含山县| 白银市| 邢台县| 昂仁县| 额济纳旗| 兴仁县| 信丰县| 正宁县| 鄂温| 大石桥市| 疏勒县|