内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

深入淺析JVM的結(jié)構(gòu)體系-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的三門網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

今天就跟大家聊聊有關(guān)深入淺析JVM的結(jié)構(gòu)體系,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

JVM 是一種抽象的計算機,基于堆棧架構(gòu),它有自己的指令集和內(nèi)存管理,是 Java 跨平臺的依據(jù),JVM解釋執(zhí)行字節(jié)碼,或?qū)⒆止?jié)碼編譯成本地代碼執(zhí)行。Java 虛擬機體系結(jié)構(gòu)如下:

深入淺析JVM的結(jié)構(gòu)體系

Class File

Class File 是平臺無關(guān)的二進制文件,包含著能被JVM執(zhí)行的字節(jié)碼,其中多字節(jié)采用大端序,字符使用一種改進的UTF-8編碼。Class文件精確的描述了一個類或接口的信息,其中包括:

  • 常量池:數(shù)值和字符串字面常量,元數(shù)據(jù)如類名、方法名稱、參數(shù),以及各種符號引用
  • 方法的字節(jié)碼指令,參數(shù)個數(shù),局部變量,大操作數(shù)棧深度,異常等信息

Class Loader

類加載器,JVM在類首次使用時動態(tài)的加載、鏈接和初始化。JVM默認的加載模型是雙親委派模型,類加載器之間存在父子關(guān)系的層次結(jié)構(gòu),內(nèi)部使用組合實現(xiàn)。此外還有其他的加載方式,比如Servlet加載,它先嘗試自己加載,不成功再委派上層加載器,類隔離;OSGI加載器之間是一種網(wǎng)狀的依賴關(guān)系,沒有上下層的區(qū)分,比較靈活。

加載

加載就是將Class文件表示的類或接口,在JVM方法區(qū)中創(chuàng)建一個與之對應(yīng)的java.lang.Class對象,像Class.forName()、ClassLoader.loadClass()、反射都能觸發(fā)類加載。當(dāng)觸發(fā)一個類加載時,詳細的過程如下:

  • 檢查類是否已經(jīng)被加載
  • 將加載請求委派給上層類加載器
  • 自己嘗試搜索類并加載

當(dāng)ClassLoader在classpath中未找到類文件,會拋出ClassNotFoundException;當(dāng)類A引用類B,類A已經(jīng)成功加載,但是加載B時未找到類文件,會拋出NoClassDefFoundError。JVM有以下幾種類加載器:

  • Bootstrap ClassLoader,啟動類加載器,加載 <java_home>\jre\lib 中 Java 核心類庫
  • Extension ClassLoader,擴展類加載器,加載 <java_home>\jre\lib\ext 中的類
  • System ClassLoader,系統(tǒng)類加載器,也叫應(yīng)用程序類加載器(Application class loader),加載 CLASSPATH 環(huán)境變量中的類

鏈接

  • 驗證:確保class文件的正確性。
  • 準(zhǔn)備:為類靜態(tài)字段分配內(nèi)存并初始化為默認值,不會執(zhí)行任何字節(jié)碼指令。
  • 解析:將符號引用轉(zhuǎn)為方法區(qū)(運行時常量池)直接引用

初始化

執(zhí)行類初始化方法,即賦值靜態(tài)字段,執(zhí)行靜態(tài)塊,順序按照其定義的先后。父類的靜態(tài)域會先于子類靜態(tài)域初始化。

至此,一個類或接口被加載到了內(nèi)存中,JVM會保證整個過程是線程安全的。需要注意的是整個過程沒有涉及到任何實例對象。

運行時數(shù)據(jù)區(qū)

1. Method Area:線程共享,存儲運行時常量池、類字段和方法信息、靜態(tài)變量和方法的字節(jié)碼,是堆的邏輯組成部分,這部分的垃圾回收是可選的。值得一提的是Hotspot JVM自JDK8之后,調(diào)整了這部分內(nèi)存的內(nèi)容,class meta-data的分配使用本地內(nèi)存,interned String和類靜態(tài)變量移動到了Java堆。

2. 運行時常量池:對于JVM來說具有核心作用,基本上涉及到方法或字段,JVM就會在運行時常量池中搜索其具體的內(nèi)存地址。

3. Heap:線程共享,存儲實例對象,實例變量以及數(shù)組,是垃圾回收的主要區(qū)域。

4. JVM Stack:線程私有,用于存儲棧幀,當(dāng)方法被調(diào)用時會創(chuàng)建一個棧幀入棧,棧幀由以下幾部分組成:

  • 局部變量表:從0開始存儲this、方法參數(shù)、局部變量。
  • 操作數(shù)棧:方法的工作區(qū),在操作數(shù)棧和局部變量之間交換數(shù)據(jù),存儲中間結(jié)果,操作數(shù)棧深度在編譯時就能確定。
  • 幀數(shù)據(jù):方法返回值,異常分派,以及當(dāng)前方法所在類運行時常量池的引用。

5. PC Register:線程私有,保存當(dāng)前指令地址,執(zhí)行后指向下一條指令地址。

6. Native Method Stack:線程私有,存儲本地方法信息,C或C++棧。

執(zhí)行引擎

讀取、翻譯、執(zhí)行字節(jié)碼。JVM基于棧架構(gòu),這個棧就是操作數(shù)棧,字節(jié)碼指令就是通過它進行各種運算。此外還有基于寄存器的虛擬機。

  • Interpreter,翻譯:解釋字節(jié)碼比較快,執(zhí)行慢,缺點是每次方法調(diào)用都要重新翻譯解釋一遍。
  • JIT Compiler,即時編譯:找出程序中頻繁調(diào)用的熱點方法,將字節(jié)碼編譯成本地代碼,提高性能。
  • Garbage Collector,垃圾收集器:回收無效對象,判斷對象是否可回收,可采用不同的垃圾回收算法。

本地方法接口和庫

JNI,調(diào)用本地方法,c/c++庫;執(zhí)行引擎所需的本地方法庫。

小結(jié)

主流JVM的實現(xiàn)有Oracle的Hotspot JVM、JRockit以及IBM的JVM。說到JVM調(diào)優(yōu),默認指的就是Hotspot VM,足見其流行程度。如今搞Java不去了解JVM就顯得有點low了-v-。

要想寫出高質(zhì)量代碼,不僅要了解JVM,像調(diào)優(yōu),問題排查等都需要完備的計算機基礎(chǔ)知識,其實無論用什么語言開發(fā),都是一個構(gòu)建和完善自身計算機知識體系的過程。

看完上述內(nèi)容,你們對深入淺析JVM的結(jié)構(gòu)體系有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。

當(dāng)前標(biāo)題:深入淺析JVM的結(jié)構(gòu)體系-創(chuàng)新互聯(lián)
當(dāng)前URL:http://www.rwnh.cn/article34/cspsse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站制作標(biāo)簽優(yōu)化、定制網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
中山市| 永泰县| 利川市| 钟祥市| 三台县| 潞城市| 乌拉特前旗| 岑溪市| 高淳县| 萨迦县| 潮州市| 云霄县| 安吉县| 长春市| 微山县| 黎川县| 永春县| 会昌县| 交城县| 谷城县| 德惠市| 云浮市| 庄浪县| 沾化县| 大同市| 儋州市| 富平县| 建昌县| 林甸县| 平江县| 兴国县| 固安县| 郎溪县| 曲松县| 双鸭山市| 利川市| 饶阳县| 曲阜市| 神木县| 江源县| 大足县|