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

深入研究Java虛擬機的類加載機制

開發 后端
可能很多朋友都認為Java虛擬機的類加載機制應該就是ClassLoader,作者在學習《深入理解Java虛擬機》這本書時,對Java虛擬機的類加載機制有了更深入的了解,ClassLoader其實只是Java虛擬機加載機制中的一部分。詳細請看下文。

說到Java虛擬機的類加載機制,很多朋友第一反應想到的應該就是ClassLoader,我也如此,不過ClassLoader其實只是Java虛擬機加載機制中的一部分,最近在看《深入理解Java虛擬機》,對Java虛擬機的類加載機制有了更深入的了解,不吐不快。

JVM中類的整個生命周期如下:

加載=》驗證=》準備=》解析=》初始化=》使用=》卸載

使用和卸載這兩個步驟不在今天的討論范圍之內,今天我們將著重討論一下前5個步驟,也就是JVM中類的整個加載機制。

1. 加載

類的加載階段,主要是獲取定義此類的二進制字節流,并將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構,最后在Java堆中生成一個代表這個類的java.lang.Class對象作為方法區這些數據的訪問入口。

相對于類加載過程的其他階段,加載階段是開發期可控性最強的階段。我們可以通過定制不通的類加載器,也就是ClassLoader來控制二進制字節流的獲取方式。

關于ClassLoader的介紹,請參照 了解ClassLoader

2. 驗證

驗證,準備和解析其實都屬于連接階段,而驗證就是連接階段的第一步。這一階段主要是為了確保Class文件的字節流中包含的信息復合當前虛擬機的要求,并且不會危害虛擬機自身的安全。

主要驗證過程包括:文件格式驗證,元數據驗證,字節碼驗證以及符號引用驗證。

3. 準備

準備階段正式為類變量分配內存并設置初始值。這里的初始值并不是初始化的值,而是數據類型的默認零值。這里提到的類變量是被static修飾的變量,而不是實例變量。

關于準備階段為類變量設置零值的唯一例外就是當這個類變量同時也被final修飾,那么在編譯時,就會直接為這個常量賦上目標值。

4. 解析

解析時虛擬機將常量池中的符號引用替換為直接引用的過程。

5. 初始化

在準備階段,變量已經賦過一次系統要求的初始值,在初始化階段,則是根據程序員通過程序的主觀計劃區初始化類變量和其他資源。

Java虛擬機規范規定了有4種情況必須立即對類進行初始化(加載,驗證,準備必須在此之前完成)

1)當使用new關鍵字實例化對象時,當讀取或者設置一個類的靜態字段(被final修飾的除外)時,以及當調用一個類的靜態方法時,如果類未初始化,則需先初始化。

2)通過反射機制對類進行調用時,如果類未初始化,則需先初始化。

3)當初始化一個類時,如果其父類未初始化,先初始化父類

4)用戶指定的執行主類(含main方法的那個類)在虛擬機啟動時會先被初始化

除了上面這4種方式,所有引用類的方式都不會觸發初始化,稱為被動引用。如:通過子類引用父類的靜態字段,不會導致子類初始化;通過數組定義來引用類,不會觸發此類的初始化;引用類的靜態常量不會觸發定義常量的類的初始化,因為常量在編譯階段已經被放到常量池中了。

總 結:

在上述5個過程當中,驗證,準備和解析完全由Java虛擬機主導和控制。只要加載階段和初始化階段程序員可以進行控制。在加載階段可以通過實現自定義的ClassLoader來加載類的二進制流,在初始化階段程序員則可完全按照需求來為類變量賦值。

原文鏈接:http://blog.csdn.net/derekjiang/article/details/7202570

【編輯推薦】

  1. 簡述Java圖形用戶界面設計(Swing)
  2. Effective Java 創建和銷毀對象
  3. Java編碼及網絡傳輸中的編碼問題
  4. 探討:Java中刪除數組中重復元素
  5. Java中帶復選框的樹的實現和應用
責任編輯:林師授 來源: derekjiang的博客
相關推薦

2016-03-02 15:09:57

Java虛擬機體系結構

2019-03-05 14:59:42

Java虛擬機加載類

2011-12-15 10:43:20

JavaNIO

2011-03-17 09:58:43

Java虛擬機JVM

2016-01-12 18:04:55

Java異常研究

2017-06-06 11:29:23

Java異常研究與分析

2022-05-11 09:03:05

CSS容器文本換行

2011-06-01 10:58:54

Android Service

2009-06-12 16:02:58

裝載Java虛擬機

2010-05-31 17:45:50

MySQL行鎖

2011-12-28 13:38:00

JavaJVM

2011-12-28 13:24:47

JavaJVM

2010-06-21 13:07:14

2012-11-14 09:57:46

JavaJava虛擬機JVM

2010-11-18 17:24:27

Oracle旋轉ins

2018-12-24 15:00:58

混合云多云云采用

2010-11-23 16:35:59

MySQL刪除多表數據

2023-11-03 08:25:28

數據結構Java

2010-05-19 14:45:46

2024-03-29 11:42:21

Java虛擬機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人不卡| 亚洲天堂影院 | 国产精品久久久久影院色老大 | 国产japanhdxxxx麻豆 | 国产午夜精品久久久 | 日韩精品a在线观看图片 | 久久国产高清视频 | 午夜视频在线播放 | 欧美日韩激情 | www日本在线 | 一区在线观看 | 欧美高清性xxxxhdvideosex | 精品在线99 | 国产精品一区久久久 | 精品一区二区三区91 | 自拍偷拍中文字幕 | 人成久久 | 国产日韩欧美 | 亚洲成人999 | 久久免费观看视频 | 国产精品成人在线观看 | 精品久久久久久久久久久久 | 97国产在线视频 | 欧美99久久精品乱码影视 | www.99热.com | 国色天香成人网 | 一区二区三区免费 | 伊人二区 | 日本成人在线观看网站 | 欧美精品一区二区三区在线 | 综合一区 | 成人欧美一区二区三区在线播放 | 台湾av在线 | 一区二区三区在线播放 | 成人欧美一区二区三区白人 | 亚洲精品电影在线观看 | 国产精品国产精品国产专区不卡 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 成人性生交大片 | av大片在线观看 | 337p日本欧洲亚洲大胆鲁鲁 |