国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述

這篇具有很好參考價(jià)值的文章主要介紹了[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、內(nèi)存結(jié)構(gòu)

類加載子系統(tǒng)的職責(zé)是:加載class文件到內(nèi)存中。

完整的內(nèi)存結(jié)構(gòu)如下:

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm

二、類加載過(guò)程

類加載過(guò)程總體分為L(zhǎng)oading(加載)、Linking(鏈接)、Initialization(初始化)三個(gè)環(huán)節(jié),在Linking階段又細(xì)分為Verification(驗(yàn)證)、Preparation(準(zhǔn)備)、Resolution(解析)三個(gè)環(huán)節(jié)。

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm

1. 加載(Loading)

  • 通過(guò)一個(gè)類的全限定名獲取定義此類的二進(jìn)制字節(jié)流
  • 將這個(gè)字節(jié)流所代表的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)
  • 在內(nèi)存中生成一個(gè)代表這個(gè)類的java.lang.Class對(duì)象,作為方法區(qū)這個(gè)類的各種數(shù)據(jù)的訪問(wèn)入口

補(bǔ)充:加載class文件的方式

  • 從本地系統(tǒng)中直接加載
  • 通過(guò)網(wǎng)絡(luò)獲取,典型場(chǎng)景:Web Applet
  • 從zip壓縮包中讀取,成為日后jar、war格式的基礎(chǔ)
  • 運(yùn)行時(shí)計(jì)算生成,使用最多的是:動(dòng)態(tài)代理技術(shù)
  • 由其他文件生成,典型場(chǎng)景:JSP應(yīng)用
  • 從專有數(shù)據(jù)庫(kù)中提取.class文件,比較少見
  • 從加密文件中獲取,典型的防Class文件被反編譯的保護(hù)措施

2. 鏈接(Linking)

(1)驗(yàn)證(Verification)

  • 驗(yàn)證字節(jié)碼文件的字節(jié)流中包含信息符合虛擬機(jī)規(guī)范,以防止不正常的字節(jié)流危害虛擬機(jī)安全。所有能被JVM識(shí)別的字節(jié)碼文件,它的有效起始都是CA FE BA BE,它是JVM識(shí)別的一個(gè)標(biāo)識(shí)。
  • 主要包括四種驗(yàn)證,文件格式驗(yàn)證,元數(shù)據(jù)驗(yàn)證,字節(jié)碼驗(yàn)證,符號(hào)引用驗(yàn)證。
  • 驗(yàn)證錯(cuò)誤會(huì)報(bào)VerifyError

????????我們使用BinaryViewer打開.class文件,發(fā)現(xiàn)他的開頭都是 CAFE BABE。

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm

(2)準(zhǔn)備(Preparation)

  • 為類變量(非final修飾的static變量)分配內(nèi)存(在方法區(qū)),設(shè)置其初始值(零值)
  • 如果 static 變量是 final 的基本類型,以及字符串常量,那么編譯階段值就確定了,賦值在準(zhǔn)備階段完成
  • 如果 static 變量是 final 的引用類型,即new的對(duì)象,賦值在初始化階段完成
  • 實(shí)例變量不會(huì)被分配初始化,實(shí)例變量隨對(duì)象被分配到Java堆中。

(3)解析(Resolution)(存疑)

  • 將常量池內(nèi)的符號(hào)應(yīng)用轉(zhuǎn)換為直接引用。
  • 符號(hào)引用是一組來(lái)描述所引用的目標(biāo)。直接引用就是直接指向目標(biāo)的指針、相對(duì)偏移量或者一個(gè)間接定位到目標(biāo)的句柄。

3. 初始化(Initialization)

????????(1)初始化階段就是執(zhí)行類構(gòu)造器方法<clinit>()的過(guò)程。此方法不需定義,是javac編譯器自動(dòng)收集類中的所有類變量的賦值動(dòng)作和靜態(tài)代碼塊中的語(yǔ)句合并而來(lái)。

????????也就是說(shuō),沒有類變量和靜態(tài)代碼塊,就不會(huì)有<clinit>,比如下面這段代碼:

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm

????????在字節(jié)碼文件中,一個(gè)類的方法會(huì)被解析到methods文件目錄下,構(gòu)造器對(duì)應(yīng)目錄下的<init>()方法, main()就對(duì)應(yīng)main()。

????????我們使用idea的jclasslib插件查看method,發(fā)現(xiàn)只有類構(gòu)造器<init>和main方法。

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm

????????(2)構(gòu)造器方法中指令按語(yǔ)句在源文件中出現(xiàn)的順序執(zhí)行。

????????結(jié)合如下代碼進(jìn)行理解:

? ? ? ? 1. 我們?cè)陟o態(tài)代碼塊中使用了類變量number,但是number的定義是在整個(gè)靜態(tài)代碼塊之后,能這樣做的原因是,在鏈接的準(zhǔn)備階段,我們已經(jīng)為number分配了內(nèi)存,并設(shè)置初始值為0.

? ? ? ? 2. 但是不能在聲明之前進(jìn)行引用。

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm

????????使用jclasslib查看<clinit>的代碼,如下:

? ? ? ? 這串代碼是與文件里語(yǔ)句的順序?qū)?yīng)起來(lái)的。

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm

?????????因此執(zhí)行這段代碼后,number的值應(yīng)該是10,而不是20.

? ? ? ? (3)若該類具有父類,JVM會(huì)保證子類的<clinit>()執(zhí)行前,父類的<clinit>()已經(jīng)執(zhí)行完畢。

????????(4)虛擬機(jī)必須保證一個(gè)類的<clinit>()方法在多線程下被同步加鎖。

????????以這段代碼為例,嘗試多線程加載一個(gè)類。

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm

????????執(zhí)行這段代碼的結(jié)果是,永遠(yuǎn)會(huì)有一個(gè)線程無(wú)法結(jié)束,因?yàn)?lt;clinit>只會(huì)有一次,也就是說(shuō)類只能被加載一次。

[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述,JVM,jvm文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-572954.html

到了這里,關(guān)于[JVM] 2. 類加載子系統(tǒng)(1)-- 內(nèi)存結(jié)構(gòu)、類加載子系統(tǒng)概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [JVM] 3. 類加載子系統(tǒng)(2)-- 類加載器、雙親委派機(jī)制(JDK1.8及之前)及其他

    [JVM] 3. 類加載子系統(tǒng)(2)-- 類加載器、雙親委派機(jī)制(JDK1.8及之前)及其他

    JDK1.8及之前和JDK9及之后的雙親委派模型是不一樣的,這里學(xué)習(xí)了1.8及以前的雙親委派模型,記錄筆記 1.8之前主要是這幾種類加載器: 負(fù)責(zé)將存放在 JAVA_HOMElib 目錄中的,或者被-Xbootclasspath參數(shù)所指定的路徑中的,并且是虛擬機(jī)識(shí)別的(僅按照文件名,如rt.jar)類庫(kù)加載到虛

    2024年02月16日
    瀏覽(28)
  • java面經(jīng)03-虛擬機(jī)篇-jvm內(nèi)存結(jié)構(gòu)&垃圾回收、內(nèi)存溢出&類加載、引用&悲觀鎖&HashTable、引用&finalize

    java面經(jīng)03-虛擬機(jī)篇-jvm內(nèi)存結(jié)構(gòu)&垃圾回收、內(nèi)存溢出&類加載、引用&悲觀鎖&HashTable、引用&finalize

    要求 掌握 JVM 內(nèi)存結(jié)構(gòu)劃分 尤其要知道方法區(qū)、永久代、元空間的關(guān)系 結(jié)合一段 java 代碼的執(zhí)行理解內(nèi)存劃分 執(zhí)行 javac 命令編譯源代碼為字節(jié)碼 執(zhí)行 java 命令 創(chuàng)建 JVM,調(diào)用類加載子系統(tǒng)加載 class,將類的信息存入 方法區(qū) 創(chuàng)建 main 線程,使用的內(nèi)存區(qū)域是 JVM 虛擬機(jī)棧 ,

    2024年02月09日
    瀏覽(23)
  • Java虛擬機(jī)-類加載子系統(tǒng)

    Java虛擬機(jī)-類加載子系統(tǒng)

    目錄 一、作用 二、角色 三、類的加載過(guò)程 (一)加載 (二)鏈接 1、驗(yàn)證 2、準(zhǔn)備 3、解析 (三)初始化 (四)補(bǔ)充說(shuō)明 四、類加載器分類 (一)引導(dǎo)類加載器和自定義加載器 (二)類加載器的獲取 (三)啟動(dòng)類加載器(bootstrap ClassLoader) (四)擴(kuò)展類加載器 (五)應(yīng)

    2024年02月06日
    瀏覽(21)
  • Linux內(nèi)核(十四)Input 子系統(tǒng)詳解 I —— 子系統(tǒng)介紹以及相關(guān)結(jié)構(gòu)體解析

    Linux內(nèi)核(十四)Input 子系統(tǒng)詳解 I —— 子系統(tǒng)介紹以及相關(guān)結(jié)構(gòu)體解析

    input子系統(tǒng)就是管理輸入的子系統(tǒng) ,和Linux其他子系統(tǒng)一樣,都是Linux內(nèi)核針對(duì)某一類設(shè)備而創(chuàng)建的框架。 鼠標(biāo)、鍵盤、觸摸屏等都屬于輸入設(shè)備,Linux將這些設(shè)備的共同特性抽象出來(lái),這就形成了input子系統(tǒng)的框架。 Linux內(nèi)核只需要通過(guò)input框架向用戶層上報(bào)輸入事件 (如:

    2024年02月05日
    瀏覽(18)
  • JVM——引言+JVM內(nèi)存結(jié)構(gòu)

    JVM——引言+JVM內(nèi)存結(jié)構(gòu)

    定義: Java VirtualMachine -java 程序的運(yùn)行環(huán)境 (ava 二進(jìn)制字節(jié)碼的運(yùn)行環(huán)境) 好處: 一次編寫,到處運(yùn)行 自動(dòng)內(nèi)存管理,垃圾回收功能 數(shù)組下標(biāo)越界檢查, 多態(tài) 比較: jvm jre jdk 面試 理解底層實(shí)現(xiàn)原理 中高級(jí)程序員的必備技能 自己百度查找 定義 Program Counter Register 程序計(jì)數(shù)器(寄

    2024年02月11日
    瀏覽(16)
  • 第2講 KMD ISP子系統(tǒng)縮略詞及目錄結(jié)構(gòu)

    第2講 KMD ISP子系統(tǒng)縮略詞及目錄結(jié)構(gòu)

    CPAS(Camera Peripherals and Support) CDM(Camera Data Mover) TFE(Thin Front End) IFE(Image Front End) OPE(Offline Processing Engine) BPS(Bayer Processing Segment) SFE(Sensor Front End) LRME(Low Resolution Motion Estimation) CSID(Camera Serial Interface Decoder) UMD(User Mode Driver) KMD(Kernel Mode Driver) AB(Arbitrated Bandwidth) IB(Instantaneous Bandwidth)

    2024年02月16日
    瀏覽(15)
  • Java虛擬機(jī)快速入門 | JVM引言、JVM內(nèi)存結(jié)構(gòu)、直接內(nèi)存

    Java虛擬機(jī)快速入門 | JVM引言、JVM內(nèi)存結(jié)構(gòu)、直接內(nèi)存

    目錄 一:JVM引言 1. 什么是 JVM ? 2. 常見的 JVM 3. 學(xué)習(xí)路線 二:JVM內(nèi)存結(jié)構(gòu) 1. 程 序 計(jì) 數(shù) 器(PC Register) 2. 虛 擬 機(jī) 棧(JVM Stacks) 3. 本 地 方 法 棧(Native Method Stacks) 4. 堆(Heap) 5. 方 法 區(qū)(Method Area) 三:直接內(nèi)存 tips: 首先給大家推薦兩款好用的免費(fèi)軟件:動(dòng)圖抓取軟

    2024年02月05日
    瀏覽(20)
  • 形象談JVM-第四章-JVM內(nèi)存結(jié)構(gòu)

    形象談JVM-第四章-JVM內(nèi)存結(jié)構(gòu)

    給我一個(gè)CPU,給我一塊內(nèi)存,我來(lái)執(zhí)行一段代碼。 我要如何分配呢? new User(); 這里有一個(gè)有一個(gè)User類,如果我要new出來(lái)User對(duì)象,必須先知道它長(zhǎng)什么樣子,我先搞一塊區(qū)域出來(lái),把User類的樣子給存下來(lái)。 可以把 “User類的樣子” 比作造房子的 “圖紙” 或者 “模板” ;

    2024年02月11日
    瀏覽(19)
  • JVM基礎(chǔ)知識(shí)(內(nèi)存區(qū)域劃分,類加載,GC垃圾回收)

    JVM基礎(chǔ)知識(shí)(內(nèi)存區(qū)域劃分,類加載,GC垃圾回收)

    目錄 內(nèi)存區(qū)域劃分 JVM中的棧 JVM中的堆 程序計(jì)數(shù)器 方法區(qū)(元數(shù)據(jù)區(qū)) 給一段代碼,某個(gè)變量在哪個(gè)區(qū)域上? 類加載 類加載時(shí)機(jī) 雙親委派模型 GC 垃圾回收機(jī)制 GC 實(shí)際工作過(guò)程 1.找到垃圾/判定垃圾 1.可達(dá)性分析(Java中的做法) 2.引用計(jì)數(shù) 2.清理垃圾 1.標(biāo)記清除 2.復(fù)制算法 3.標(biāo)記整

    2024年02月07日
    瀏覽(28)
  • java八股文面試[JVM]——JVM內(nèi)存結(jié)構(gòu)

    java八股文面試[JVM]——JVM內(nèi)存結(jié)構(gòu)

    參考: JVM學(xué)習(xí)筆記(一)_卷心菜不卷Iris的博客-CSDN博客 JVM 是運(yùn)行在操作系統(tǒng)之上的,它與硬件沒有直接的交互 JVM內(nèi)存結(jié)構(gòu): ? 方法區(qū):存儲(chǔ)已被虛擬機(jī)加載的類元數(shù)據(jù)信息(元空間) 堆:存放對(duì)象實(shí)例,幾乎所有的對(duì)象實(shí)例都在這里分配內(nèi)存 虛擬機(jī)棧:虛擬機(jī)棧描述的是

    2024年02月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包