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

JVM加載過程及異常

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

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

虛擬機(jvm)把描述類的數(shù)據(jù)從class文件或其他形式數(shù)據(jù)加載到內(nèi)存,并對數(shù)據(jù)進(jìn)行校驗、準(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)的類型,然后進(jìn)行初始化操作,在所有都正確完成之后,才構(gòu)造了一個完整的Test類對象,進(jìn)而才能正確的執(zhí)行方法。

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

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

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

2、將這個二進(jìn)制流所代表的靜態(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:所要求的編譯后的類的二進(jìn)制數(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,詳細(xì)代碼如下:

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

 

 

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

 

 

 

從二進(jìn)制源碼看,實際上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ù)棧公眾號

主站蜘蛛池模板: 在线观看国产视频 | www.天天操 | 最新午夜综合福利视频 | 日韩黄a| 欧美精品成人一区二区三区四区 | 欧美一区二区三区视频 | 国产91丝袜在线播放 | 亚洲国产精品成人综合久久久 | 亚洲国产精品久久久 | 亚洲啊v在线 | 大伊人久久 | 国产日韩欧美一区二区在线播放 | 亚洲成人免费视频在线 | 精品久久国产 | 日韩欧美在线一区 | 欧美三级视频在线观看 | 中文字幕在线看人 | 久久手机视频 | 一区二区三区视频在线观看 | 日韩国产一区二区 | 欧美黑人一级爽快片淫片高清 | 国产丝袜一区二区三区免费视频 | 国产黄色网址在线观看 | 久久亚洲精品久久国产一区二区 | 久久久看 | 亚洲成人自拍 | 三级av免费 | 国产精品美女久久久久久久网站 | 二区在线视频 | 麻豆视频在线看 | 欧美一级淫片免费视频黄 | 91九色视频 | 国产乱码精品一区二区三区中文 | 久久9精品 | 成人日批视频 | 久久欧美高清二区三区 | 中国av在线免费观看 | 丁香综合| 国产一区二区三区www | 久久综合久久综合久久综合 | 日韩欧美国产一区二区 |