成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM加載過程及異常

開發(fā) 后端
虛擬機(jvm)把描述類的數(shù)據(jù)從class文件或其他形式數(shù)據(jù)加載到內(nèi)存,并對數(shù)據(jù)進行校驗、準(zhǔn)備、解析和初始化。最終形成可以被虛擬機直接使用的Java 類型。這就是虛擬機的類加載機制。

1、虛擬機執(zhí)行過程

虛擬機(jvm)把描述類的數(shù)據(jù)從class文件或其他形式數(shù)據(jù)加載到內(nèi)存,并對數(shù)據(jù)進行校驗、準(zhǔn)備、解析和初始化。最終形成可以被虛擬機直接使用的Java 類型。這就是虛擬機的類加載機制。

類加載的生命周期包括:加載、鏈接(驗證、準(zhǔn)備和解析)、初始化、使用、卸載。

啟  動

Jvm通過調(diào)用某個類指定類的main方法啟動,傳遞給main所在類一個字符串?dāng)?shù)組。如下:

java Test hello smurfs, welcome to jvm.這樣jvm通過加載Test.class文件,然后把hello smurfs, welcome to jvm.作為5個長度的字符串?dāng)?shù)據(jù)傳遞給Test類的main方法去執(zhí)行。

Jvm加載Test.class文件后,通過鏈接步驟,把Test.class生成的class對象鏈接到對應(yīng)的類型,然后進行初始化操作,在所有都正確完成之后,才構(gòu)造了一個完整的Test類對象,進而才能正確的執(zhí)行方法。

⑴class文件裝載:尋找一個具有特定名稱的類的二進制形式,并且用這個二進制形式構(gòu)造一個代表該類的class對象的過程叫裝載(是個動詞,指過程)。裝載是通過ClassLoader和其子類實現(xiàn)的,ClassLoader的不同子類可以實現(xiàn)不同的裝載策略,包括class文件加密()、特殊位置加載(網(wǎng)絡(luò)加載)等都是通過classloader來完成的。類加載后的信息存在于jvm的方法區(qū)域內(nèi),這個區(qū)域緩存這類的信息,并且這個區(qū)域基本是不進行垃圾回收的,因此如果沒有進行classloader加載對象的清空,新的class文件替代舊class文件后,類信息并沒有被替換。

在加載階段,虛擬機需要完成以下3件事情:

1、通過類的全限定名來獲取定義此類的二進制流;

2、將這個二進制流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)(jvm內(nèi)存)的運行時數(shù)據(jù)

3、在Java 堆(jvm內(nèi)存)中生成一個代表類的java.lang.Class對象,作為方法區(qū)這些數(shù)據(jù)的入口。

如果類的裝載出現(xiàn)錯誤,會拋出LinkageError異常的以下3個子類示例:

lClassCircularityError:因一個類或接口是自身的超類而不能被加載。

lClassFormatError:所要求的編譯后的類的二進制數(shù)據(jù)是損壞的。

lNoClassDefFoundError:找不到類的定義。

以上3中error,以下一一舉例:

l在不包含Test.java的目錄里執(zhí)行java Test后出現(xiàn)NoClassDefFoundError

 

 

l接下來看看ClassFormatError錯誤,首先編寫個Test.java文件,內(nèi)容如下:

修改編譯后Test.class文件,把其中的println改成printl后,再通過java Test執(zhí)行:

 

 

l最后來看ClassCircularityError錯誤。正常清空下,這種錯誤是不會存在的,但是當(dāng)大型項目,需要很多人提交代碼時就可能會出現(xiàn)問題。

首先編寫2個類,Test和A,Test繼承與A,詳細代碼如下:

編譯后產(chǎn)生Test.class和A.class 2個2進制文件,刪除A.class,把Test.class改名保護起來為Test.class.a,再編寫Test和A,這次A繼承自Test,詳細代碼如下:

 

 

這次編譯后刪除Test.class,保留A.class文件,然后把先前改名的Test.class.a該回Test.class,再執(zhí)行java Test后

 

 

 

從二進制源碼看,實際上Test繼承了自身,因此會有如此的error。

原文鏈接:http://smurfs.iteye.com/blog/1433142

【編輯推薦】

  1. 高手深度解析:JVM是什么
  2. BicaVM:基于JavaScript的JVM-為什么呢?
  3. Java虛擬機及JVM體系結(jié)構(gòu)
  4. JVM崩潰的原因及解決
  5. JVM優(yōu)化引起的邏輯錯誤
責(zé)任編輯:林師授 來源: smurfs的博客
相關(guān)推薦

2020-10-19 09:09:46

Class文件加載過程

2024-08-09 11:50:00

2022-01-14 11:45:40

JVM 虛擬機Java

2019-07-24 08:34:35

Java對象數(shù)據(jù)結(jié)構(gòu)

2021-08-30 07:22:14

JVM OutOfMemory異常

2023-08-01 08:20:42

JVM優(yōu)化虛擬機

2012-05-15 02:04:22

JVMJava

2019-06-12 15:07:24

JVMStackHeap

2022-04-20 20:28:40

HDF 驅(qū)動框架鴻蒙操作系統(tǒng)

2023-10-31 16:00:51

類加載機制Java

2012-01-11 10:45:57

JavaJVM

2024-03-28 12:32:18

JVM類加載構(gòu)造器

2023-08-02 08:38:27

JVM加載機制

2024-12-02 09:01:23

Java虛擬機內(nèi)存

2023-10-12 22:35:08

2021-07-06 13:32:55

JVM

2021-07-01 19:30:23

JVM內(nèi)部鎖線程

2021-05-25 09:56:42

Jvm類加載機制Java

2021-02-28 11:58:33

JVM機制語言

2021-05-13 21:51:38

鴻蒙HarmonyOS應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲国产一区在线 | 免费在线观看一区二区 | 国产影音先锋 | 精品国产一区二区三区成人影院 | 91九色在线观看 | 国产区在线看 | 国产乱一区二区三区视频 | 欧美日韩久久精品 | 免费看国产片在线观看 | 久久毛片 | 免费一区 | 中文字幕专区 | 国产精品综合一区二区 | 国产成人高清 | 精品国产一区二区三区免费 | 日本午夜精品 | 国产a区| 国产一区电影 | 亚洲精品久久久久久久久久久久久 | 日本三级网址 | 国产精品自拍啪啪 | 成人综合视频在线 | 欧美亚洲国产日韩 | 日本在线一区二区 | 日韩中文一区二区三区 | 精品一级| 国产精品久久久久久影院8一贰佰 | 日日草夜夜草 | 99国产欧美| 性福视频在线观看 | 免费一区二区三区 | av一区二区在线观看 | 日韩精品一区中文字幕 | 亚洲第一免费播放区 | 伊人网在线看 | 国产精品久久久久久久一区二区 | 中文字幕成人 | 国产欧美日韩视频 | 做a视频在线观看 | 久久视频免费观看 | 日本不卡视频 |