JVM——類加載機制

?

  虛擬機把描述類的數據從Class文件加載到內存,并對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這就是虛擬機的類加載機制。

  在Java語言中,類型的加載、連接和初始化過程都是在程序運行期間完成的,這種策略雖然會令類加載時稍微增加一些性能開銷,但是會為Java應用程序提供高度的靈活性,Java里天生可以動態擴展的語言特性就是依賴運行期動態加載和動態連接這個特點實現的。

   類加載的生命周期包括:加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸載(UnLoading)7個階段。其中驗證、準備、解析3個部分統稱為連接(Linking)。

  什么情況下需要開始類加載過程的第一階段:加載?Java虛擬機規范中沒有進行強制約束,這點可以交給虛擬機的具體實現來自由把握。但是對于初始化階段,虛擬機規范則是嚴格規定了有且只有5種情況必須立即對類進行“初始化”(而加載、驗證、準備自然需要在此之前開始): 

  1. 遇到new、getstatic、putstatic或invokestatic這4條字節碼指令時,如果類沒有進行過初始化,則需要先觸發其初始化。生成這4條最常見的Java代碼場景是:使用new關鍵字實例化對象的時候、讀取或設置一個類的靜態字段(被final修飾、已在編譯期把結果放入常量池的靜態字段除外)的時候,以及調用一個類的靜態方法的時候。
  2. 使用java.lang.reflect包的方法對類進行反射調用的時候,如果類沒有進行過初始化,則需要先觸發其初始化。
  3. 當初始化一個類的時候,如果發現其父類還沒有進行過初始化,則需要先觸發其父類的初始化。
  4. 當虛擬機啟動時,用戶需要指定一個要執行的主類(包含main()方法的那個類),虛擬機會先初始化這個主類。
  5. 當使用JDK1.7的動態語言支持時,如果一個java.lang.invoke.MethodHandle實例最后的解析結果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且這個方法句柄所對應的類沒有進行過初始化,字需要先觸發其初始化。

  對于這5種會觸發類進行初始化的場景,虛擬機規范中使用了一個很強烈的限定語:“有且只有”,這5種場景中的行為稱為對一個類進行主動引用。

類的加載過程詳解鏈接

轉載于:https://www.cnblogs.com/zhengbin/p/5631349.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271487.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271487.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

操作系統基礎知識筆記

一、操作系統相關概念 計算機軟件:系統軟件和應用軟件。 計算機系統資源:硬件資源、軟件資源。 硬件資源:中央處理器、存儲器、輸入、輸出等物理設備。 軟件資源:以文件形式保存到存儲器上的程序和數據信息。 定義:有效…

數據庫字段

一、數據庫設計 1、關鍵單詞 (1)、預付:prepay (2)、記賬:bill (3)、發票:invoice (4)、備注:remark (5&#xff09…

python一般學多久可以考試_為何Python適合初學者 一般Python要學習多久

為何Python適合初學者?一般Python要學習多久?很多人都覺得,Python是一門很好學的語言,非常適合入門。但更多人都是不清楚具體原因的。那么,我們不如一起來看看Python為何更適合初學者,為何更適合學習吧。另外,這門偉…

操作系統基礎:進程知識筆記(一)

進程介紹 進程管理也稱為處理機管理。進程主要是為了解決多道程序批處理系統和分時系統中針對多個并發執行的程序,用來描述系統中執行時動態變化過程。進程屬于自愿分配和獨立運行的基本單位。 1、進程的概念知識 1.1 程序順序執行的特征 程序順序執行的特征&#x…

ngod規范_NGOD的架構說明與比較

下一代視頻點播服務(NGOD)的架構說明與比較目錄1ISA和NGOD的誕生背景......................................................................................21.1為什么要運營商制定標準?...................................................................2…

計算機電子琴彈奏怎么打開,怎么打開電腦鍵盤電子琴軟件

五、使用對話框中的快捷鍵   目的快捷鍵   取消當前任務 ESC   如果當前控件是個按鈕,要   單擊該按鈕或者如果當前控   件是個復選框,要選擇或清   除該復選框或者如果當前控   件是個選項按鈕,要單擊該   選項空格鍵   單…

JVM——三個ClassLoader詳解

類裝載工作由ClassLoader及其子類負責,ClassLoader是一個重要的Java執行時系統組件,它負責在運行時查找和裝入Class字節碼文件。JVM在運行時會產生三個ClassLoader:根裝載器、ExtClassLoader(擴展類裝載器)和AppClassL…

c++頭文件_51單片機C語言編程知多少:幾人不知頭文件,你要的干貨在這里了

近期寫了一些比較大的單片機程序,找了很多參考資料,看了大量別人的程序。我從中發現了自己對于C語言編程還只是知道如何實現功能,但對編程規范掌握的不好,編程習慣也沒有很好的養成。學了這么久的單片機,還真是挺難為情…

最常問的MySQL面試題集合

除了基礎題部分,本文還收集整理的MySQL面試題還包括如下知識點或題型:MySQL高性能索引SQL語句MySQL查詢優化MySQL高擴展高可用MySQL安全性問題1:char、varchar的區別是什么?varchar是變長而char的長度是固定的。如果你的內容是固定…

計算機打印機共享失敗,局域網共享打印機連接失敗怎么辦

在局域網中由于辦公需要,經常要連接網絡打印機,但是有時候就無法連接,提示各種連接失敗,下面是學習啦小編給大家整理的一些有關局域網共享打印機連接失敗的解決方法,希望對大家有幫助!局域網共享打印機連接失敗的解決方…

高斯模糊java代碼_OpenCV3 Java圖形圖像上的高斯模糊(Imgproc.GaussianBlur)

代碼案例:package com.what21.opencv.demo;import org.opencv.core.Core;import org.opencv.core.Mat;import org.opencv.core.Size;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;public class GaussianBlur {public static void main…

實時數據集成

企業應用集成 面向服務的體系結構 (SOA) 目前應該是一個很受歡迎的名詞,中間件技術人員幾乎到了言必稱SOA的程度,數據集成當然也不例外,在Oracle openworld2008大會上,就推出了一堆數據集成的專場演講,其中和SOA結合最…

idea 中代碼大小寫切換快捷鍵

idea用使用 CTRL SHIFT U 使用前: 使用后:

nginx做服務器入口_Nginx實現http反向代理

什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器…

操作系統基礎:進程知識筆記(二)

一、管程 1、管道概念概念 管道是用于連接一個讀進程和一個寫進程。用來實現它們之間通信的共享文件。 2、管程的概念 管程是由一些共享數據、一組能為并發進程所執行的作用在共享數據上的操作集合、初始代碼、以及存取權組成。管程提供了一種可以允許多線程安全、有效地共享抽…

怎樣保護計算機連接線,一根網線把電腦燒了:雷雨天如何保護家電?

記得在小時候,每逢遇到雷雨天氣,爸媽總會讓我們關掉電視機、電腦等家電,雖然很不情愿,但為了避免電器遭受雷擊造成損壞,我們還是會照做。現在長大了,除了知其然,還更要知其所以然,那…

HDU5697 刷題計劃 dp+最小乘積生成樹

分析:就是不斷遞歸尋找靠近邊界的最優解 學習博客(必須先看這個): 1:http://www.cnblogs.com/autsky-jadek/p/3959446.html 2:http://blog.csdn.net/u013849646/article/details/51524748 注:這…

pos加盟申請php_ThinkPHP萬能表單程序源碼 報名預約加盟申請調查表單程序源碼

平臺聲明:本商品由平臺商家發布,如果本商品源碼侵犯了您的利益請在上方價格右側或聯系平臺客服舉報。微信表單-實現各行業的報名、預約、加盟申請、問卷調查等應用01.自定義表單模型(自定義字段支持字符串、數字、單選、多選、下拉、日歷、時間、郵件、省…

分析Java中的三種不同變量的區別

1、首先分析Java中的三種不同變量的區別,如下表所示 概念默認值其他類變量 也叫靜態變量,是類中獨立于方法之外的變量 用static 修飾 有默認初始值,系統自動初始化。 如boolean默認為false. 可以被public,protect,pr…