亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JVM如何加載一個類的過程

2019-11-10 18:03:15
字體:
來源:轉載
供稿:網友

類的加載過程

java源代碼被編譯成class字節碼,JVM把描述類數據的字節碼.Class文件加載到內存,并對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的java類型,這就是虛擬機的類加載機制。

類從被加載到虛擬機內存中開始,到卸載出內存為止,它的生命周期包括了:加載(Loading)、驗證(Verification)、準備(PReparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸載(Unloading)七個階段,其中驗證、準備、解析三個部分統稱鏈接。 這里寫圖片描述 加載(裝載)、驗證、準備、初始化和卸載這五個階段順序是固定的,類的加載過程必須按照這種順序開始,而解析階段不一定;它在某些情況下可以在初始化之后再開始,這是為了運行時動態綁定特性(也稱為動態綁定或者晚期綁定,例如重寫)。


1.加載: 在加載階段,虛擬機主要完成三件事: 1.通過一個類的全限定名來獲取定義此類的二進制字節流。 2.將這個字節流所代表的靜態存儲結構轉化為方法區域的運行時數據結構。 3.在Java堆中生成一個代表這個類的java.lang.Class對象,作為方法區域數據的訪問入口 相對于類加載過程的其他階段,加載階段(準備地說,是加載階段中獲取類的二進制字節流的動作)是開發期可控性最強的階段,因為加載階段可以使用系統提供的類加載器(ClassLoader)來完成,也可以由用戶自定義的類加載器完成,開發人員可以通過定義自己的類加載器去控制字節流的獲取方式。 加載階段完成后,虛擬機外部的二進制字節流就按照虛擬機所需的格式存儲在方法區之中,方法區中的數據存儲格式有虛擬機實現自行定義,虛擬機并未規定此區域的具體數據結構。然后在java堆中實例化一個java.lang.Class類的對象,這個對象作為程序訪問方法區中的這些類型數據的外部接口。

2.驗證: 驗證階段作用是保證Class文件的字節流包含的信息符合JVM規范,不會給JVM造成危害。如果驗證失敗,就會拋出一個java.lang.VerifyError異?;蚱渥宇惍惓?。驗證過程分為四個階段 1.文件格式驗證:驗證字節流文件是否符合Class文件格式的規范,并且能被當前虛擬機正確的處理。 2.元數據驗證:是對字節碼描述的信息進行語義分析,以保證其描述的信息符合Java語言的規范。 3.字節碼驗證:主要是進行數據流和控制流的分析,保證被校驗類的方法在運行時不會危害虛擬機。 4.符號引用驗證:符號引用驗證發生在虛擬機將符號引用轉化為直接引用的時候,這個轉化動作將在解析階段中發生。

3.準備: 準備階段為變量分配內存并設置類變量的初始化。在這個階段分配的僅為類的變量(static修飾的變量),而不包括類的實例變量。對已非final的變量,JVM會將其設置成“零值”,而不是其賦值語句的值: pirvate static int size = 12; 那么在這個階段,size的值為0,而不是12。 final修飾的類變量將會賦值成真實的值。

4.解析: 解析階段是虛擬機常量池內的符號引用替換為直接引用的過程。 符號引用:符號引用是一組符號來描述所引用的目標對象,符號可以是任何形式的字面量,只要使用時能無歧義地定位到目標即可。符號引用與虛擬機實現的內存布局無關,引用的目標對象并不一定已經加載到內存中。 直接引用:直接引用可以是直接指向目標對象的指針、相對偏移量或是一個能間接定位到目標的句柄。直接引用是與虛擬機內存布局實現相關的,同一個符號引用在不同虛擬機實例上翻譯出來的直接引用一般不會相同,如果有了直接引用,那引用的目標必定已經在內存中存在。 虛擬機規范并沒有規定解析階段發生的具體時間,只要求了在執行anewarry、checkcast、getfield、instanceof、invokeinterface、invokespecial、invokestatic、invokevirtual、multianewarray、new、putfield和putstatic這13個用于操作符號引用的字節碼指令之前,先對它們使用的符號引用進行解析,所以虛擬機實現會根據需要來判斷,到底是在類被加載器加載時就對常量池中的符號引用進行解析,還是等到一個符號引用將要被使用前才去解析它。 解析的動作主要針對類或接口、字段、類方法、接口方法四類符號引用進行。分別對應編譯后常量池內的CONSTANT_Class_Info、CONSTANT_Fieldref_Info、CONSTANT_Methodef_Info、CONSTANT_InterfaceMethoder_Info四種常量類型。 1.類、接口的解析 2.字段解析 3.類方法解析 4.接口方法解析

5.初始化: 類的初始化階段是類加載過程的最后一步,在準備階段,類變量已賦過一次系統要求的初始值,而在初始化階段,則是根據程序員通過程序制定的主觀計劃去初始化類變量和其他資源,或者可以從另外一個角度來表達:初始化階段是執行類構造器()方法的過程。在以下四種情況下初始化過程會被觸發執行: 1.遇到new、getstatic、putstatic或invokestatic這4條字節碼指令時,如果類沒有進行過初始化,則需先觸發其初始化。生成這4條指令的最常見的java代碼場景是:使用new關鍵字實例化對象、讀取或設置一個類的靜態字段(被final修飾、已在編譯器把結果放入常量池的靜態字段除外)的時候,以及調用類的靜態方法的時候。 2.使用java.lang.reflect包的方法對類進行反射調用的時候 3.當初始化一個類的時候,如果發現其父類還沒有進行過初始化、則需要先出發其父類的初始化 4.jvm啟動時,用戶指定一個執行的主類(包含main方法的那個類),虛擬機會先初始化這個類 在上面準備階段 public static int value = 12; 在準備階段完成后 value的值為0,而在初始化階調用了類構造器()方法,這個階段完成后value的值為12。 *類構造器()方法是由編譯器自動收集類中的所有類變量的賦值動作和靜態語句塊(static塊)中的語句合并產生的,編譯器收集的順序是由語句在源文件中出現的順序所決定的,靜態語句塊中只能訪問到定義在靜態語句塊之前的變量,定義在它之后的變量,在前面的靜態語句快可以賦值,但是不能訪問。 *類構造器()方法與類的構造函數(實例構造函數()方法)不同,它不需要顯式調用父類構造,虛擬機會保證在子類()方法執行之前,父類的()方法已經執行完畢。因此在虛擬機中的第一個執行的()方法的類肯定是java.lang.Object。 *由于父類的()方法先執行,也就意味著父類中定義的靜態語句快要優先于子類的變量賦值操作。 *()方法對于類或接口來說并不是必須的,如果一個類中沒有靜態語句,也沒有變量賦值的操作,那么編譯器可以不為這個類生成()方法。 *接口中不能使用靜態語句塊,但接口與類不太能夠的是,執行接口的()方法不需要先執行父接口的()方法。只有當父接口中定義的變量被使用時,父接口才會被初始化。另外,接口的實現類在初始化時也一樣不會執行接口的()方法。 *虛擬機會保證一個類的()方法在多線程環境中被正確加鎖和同步,如果多個線程同時去初始化一個類,那么只會有一個線程執行這個類的()方法,其他線程都需要阻塞等待,直到活動線程執行()方法完畢。如果一個類的()方法中有耗時很長的操作,那就可能造成多個進程阻塞。

6.使用: 新線程—程序計數器—-jvm棧執行(對象引用)—–堆內存(直接引用)—-方法區

7.卸載: GC垃圾回收


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近2019好看的中文字幕免费| 91精品久久久久久久久久久久久久| 亚洲精品久久久久国产| 日韩电影中文字幕在线| 日韩激情av在线免费观看| 亚洲桃花岛网站| 九九热视频这里只有精品| 91亚洲永久免费精品| 国产原创欧美精品| 国产一区二区精品丝袜| 国产精品美女www| 69av成年福利视频| 高跟丝袜一区二区三区| 国产精品情侣自拍| 日本亚洲欧美三级| 亚洲国产精品嫩草影院久久| 亚洲视频在线观看网站| 91精品在线影院| 欧美日韩激情美女| 欧美日韩国产综合新一区| 欧洲日韩成人av| 日韩免费视频在线观看| 97国产成人精品视频| 国产精品成人久久久久| 欧美激情在线视频二区| 久久久久久国产免费| 日本欧美中文字幕| 宅男66日本亚洲欧美视频| 97色在线观看| 在线亚洲午夜片av大片| 亚洲男人天堂视频| 亚洲欧美精品中文字幕在线| 美女福利视频一区| 亚洲自拍在线观看| 欧美激情精品久久久久久变态| 日本亚洲欧美三级| www.午夜精品| 国产视频精品免费播放| 亚洲天堂男人的天堂| 久久影视三级福利片| 国产精品大陆在线观看| 成人黄色免费片| 亚洲色图狂野欧美| 亚洲成人激情小说| 狠狠操狠狠色综合网| 日本精品久久中文字幕佐佐木| 亚洲精品wwwww| 深夜精品寂寞黄网站在线观看| 97精品国产91久久久久久| 国内伊人久久久久久网站视频| 亚洲国产精品悠悠久久琪琪| 欧美一级高清免费播放| 久久精品夜夜夜夜夜久久| 国产男人精品视频| 国产精品十八以下禁看| 岛国av一区二区三区| 国产性猛交xxxx免费看久久| 疯狂蹂躏欧美一区二区精品| 久久韩剧网电视剧| www.亚洲一区| 日本久久久久久久久| 日韩国产精品一区| 欧美日韩国产限制| 欧美交受高潮1| 最近2019年日本中文免费字幕| 97激碰免费视频| 亚洲天堂免费在线| 午夜精品久久久久久99热| 九九综合九九综合| 国产精品欧美激情| 日韩精品欧美激情| 91久久久久久久久| 久久精品国产一区二区电影| 欧美性生活大片免费观看网址| 亚洲伊人久久大香线蕉av| 草民午夜欧美限制a级福利片| 不卡av电影院| 亚洲精品一区在线观看香蕉| 另类专区欧美制服同性| 国产又爽又黄的激情精品视频| 亚洲福利小视频| 欧美一区二区大胆人体摄影专业网站| 久久激情五月丁香伊人| 中文字幕少妇一区二区三区| 亚洲天堂免费视频| 综合136福利视频在线| 亚洲精品一区中文字幕乱码| 欧美国产精品人人做人人爱| 日本中文字幕久久看| 亚洲精品视频免费在线观看| 91手机视频在线观看| 欧洲s码亚洲m码精品一区| 久久精品国产99国产精品澳门| 国产97色在线|日韩| 中文字幕欧美专区| 亚洲精品98久久久久久中文字幕| 日韩av在线一区二区| 日韩av一区在线观看| 欧美午夜宅男影院在线观看| 伊人av综合网| 久久在精品线影院精品国产| 久久久999精品视频| 国产精品久久一区主播| 精品偷拍各种wc美女嘘嘘| 国产盗摄xxxx视频xxx69| 亚洲第一福利在线观看| 欧美成人精品不卡视频在线观看| 亚洲xxxx在线| 97激碰免费视频| 欧美性高潮在线| 国产精品亚发布| 国产精品视频永久免费播放| 欧美国产亚洲精品久久久8v| 一个人www欧美| 亚洲精品999| 欧美另类高清videos| 欧美成人精品在线观看| 国内成人精品一区| 久久综合久久88| 精品国产一区二区三区久久久| 国产视频精品自拍| xvideos成人免费中文版| 亚洲一区二区免费在线| 亚洲第一天堂av| 热久久视久久精品18亚洲精品| 91色琪琪电影亚洲精品久久| 国产精品国产亚洲伊人久久| 久久色免费在线视频| 88国产精品欧美一区二区三区| 国产精品91在线观看| 91久久久亚洲精品| 国产精品毛片a∨一区二区三区|国| 久久69精品久久久久久久电影好| 亚洲欧洲第一视频| 国产精品久久久久秋霞鲁丝| 欧美激情a在线| 久久影视电视剧免费网站清宫辞电视| 亚洲欧美在线看| 欧美性受xxxx黑人猛交| 日韩免费在线电影| 亚洲国产日韩欧美综合久久| 91九色国产社区在线观看| 成人激情视频网| 日韩欧美精品中文字幕| 久久精品国产成人精品| zzjj国产精品一区二区| 国产精品欧美激情| 91在线精品视频| 国产亚洲精品美女久久久久| 国产成人精品在线| 久久免费少妇高潮久久精品99| 成人国产精品色哟哟| 热99精品里视频精品| 国产日韩一区在线| 成人精品一区二区三区电影免费| 蜜臀久久99精品久久久久久宅男| 日韩高清中文字幕| 久久偷看各类女兵18女厕嘘嘘| 亚洲欧美第一页| 亚洲欧洲中文天堂| 国内精品久久久久久中文字幕| 欧美日本啪啪无遮挡网站| 在线免费观看羞羞视频一区二区| 夜夜躁日日躁狠狠久久88av|