日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

JVM 学习二:类加载器子系统

發(fā)布時間:2025/3/12 windows 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM 学习二:类加载器子系统 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 類加載器子系統(tǒng)的作用

  • 類加載器子系統(tǒng)負責從文件系統(tǒng)或者網絡中加載 Class 文件,Class 文件在文件開關有特定的文件標識
  • ClassLoader 只負責 Class 文件的加載,至于它是否可以運行,則由 Execution Engine(執(zhí)行引擎)決定
  • 加載的類信息存放于一塊稱為方法區(qū)的內存空間。除了類的信息外,方法區(qū)中還會存放運行時常量池信息,可能還包括字符串字面量和數(shù)字常量(這部分常量信息是 Class 文件中常量池部分的內存映射)

2 類的加載過程

加載 --> 鏈接(驗證、準備、解析) --> 初始化

2.1 加載

  • 通過一個類的完全限定名獲取定義此類的二進制字節(jié)流
  • 將這個字節(jié)流所代表的靜態(tài)存儲結構轉化為方法區(qū)的運行時數(shù)據結構
  • 在內存中生成一個代表這個類的 java.lang.Class 對象,作為方法區(qū)這個類的各種數(shù)據的訪問入口
  • 2.2 鏈接

    2.2.1 驗證(Verify)

    • 目的在于確保 Class 文件的字節(jié)流中包含信息符合當前虛擬機要求,保證被加載類的正確性,不會危害虛擬機自身安全
    • 主要包括四種驗證:文件格式驗證、元數(shù)據驗證、字節(jié)碼驗證、符號引用驗證

    2.2.2 準備(Prepare)

    • 類變量(靜態(tài)變量)分配內存并且設置該類變量的默認初始值,即零值
    • 這里不包含用 final 修飾的 static,轉為 final 在編譯的時候就會分配了,準備階段會顯式初始化
    • 這里不會為實例變量分配初始化,類變量會分配在方法區(qū)中,而實例變量是會隨著對象一起分配到 Java 堆中

    2.2.3 解析(Resolve)

    • 將常量池內的符號引用轉換為直接引用的過程
    • 事實上,解析操作往往會伴隨著 JVM 在執(zhí)行完初始化之后再執(zhí)行
    • 符號引用就是一組符號來描述所引用的目標。符號引用 的字面量形式明確定義在《Java 虛擬機規(guī)范》的 Class 文件格式中,直接引用就是直接指向目標的指針,相對偏移量或一個間接定位到目標的句柄
    • 解析動作主要針對類或接口、字段、類方法、接口方法、方法類型等。對應常量池中的 CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info 等

    2.3 初始化

    • 初始化階段就是執(zhí)行類構造器方法 <clinit>() 的過程
    • 此方法不需要定義,是 Java 編譯器自動收集類中的所有類變量的賦值動作和靜態(tài)代碼塊中的語句合并而來,如果沒有類變量和靜態(tài)代碼塊,是沒有 <clinit>() 方法的
    • 構造器方法中指令按語句在源文件中出現(xiàn)的順序執(zhí)行,例如:
    public class ClassInitTest {static {num = 20;System.out.println(num); // 編譯不通過:非法的前向引用}private static int num = 10;public static void main(String[] args) {System.out.println(num); // 此處打印的值為 10} }
    • <clinit>() 不同于類的構造器。(關聯(lián):構造器是虛擬機視角下的 <init>() )
    • 若該類具有父類,JVM 會保證子類的 <clinit>() 已經執(zhí)行完畢
    • 虛擬機必須保證一個類的 <clinit>() 方法在多線程下被同步加鎖

    總結

    以上是生活随笔為你收集整理的JVM 学习二:类加载器子系统的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。