最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

新手入門Jvm--jvm概覽

 更新時間:2021年06月18日 16:52:14   作者:讓你跑39m哈哈  
JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機(jī),是通過在實際的計算機(jī)上仿真模擬各種計算機(jī)功能來實現(xiàn)的

1. 什么是Jvm

JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機(jī),是通過在實際的計算機(jī)上仿真模擬各種計算機(jī)功能來實現(xiàn)的。

引入Java語言虛擬機(jī)后,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用Java虛擬機(jī)屏蔽了與具體平臺相關(guān)的信息,使得Java語言編譯程序只需生成在Java虛擬機(jī)上運行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。

Java虛擬機(jī)有自己完善的硬件架構(gòu),如處理器、堆棧等,還具有相應(yīng)的指令系統(tǒng)。

Java虛擬機(jī)本質(zhì)上就是一個程序,當(dāng)它在命令行上啟動的時候,就開始執(zhí)行保存在某字節(jié)碼文件中的指令。Java語言的可移植性正是建立在Java虛擬機(jī)的基礎(chǔ)上。任何平臺只要裝有針對于該平臺的Java虛擬機(jī),字節(jié)碼文件(.class)就可以在該平臺上運行。這就是“一次編譯,多次運行”。

Java虛擬機(jī)不僅是一種跨平臺的軟件,而且是一種新的網(wǎng)絡(luò)計算平臺。該平臺包括許多相關(guān)的技術(shù),如符合開放接口標(biāo)準(zhǔn)的各種API、優(yōu)化技術(shù)等。Java技術(shù)使同一種應(yīng)用可以運行在不同的平臺上。Java平臺可分為兩部分,即Java虛擬機(jī)(Java virtual machine,JVM)和Java API類庫

Java虛擬機(jī)主要分為五大模塊:

  • 類裝載器子系統(tǒng)
  • 運行時數(shù)據(jù)區(qū)
  • 執(zhí)行引擎
  • 本地方法接口
  • 垃圾收集模塊

2. Jvm組成

2.1 Jdk體系結(jié)構(gòu)

在這里插入圖片描述

2.2 Jvm體系結(jié)構(gòu)

在這里插入圖片描述 .

類加載器線程共享區(qū)域 方法區(qū)堆 線程私有區(qū)域 虛擬機(jī)棧本地方法棧程序計數(shù)器

3. 類加載機(jī)制

3.1 流程

加載 >> 驗證 >> 準(zhǔn)備 >> 解析 >> 初始化 >> 使用 >> 卸載

  • 加載:在硬盤上查找并通過IO讀入字節(jié)碼文件,使用到類時才會加載,例如調(diào)用類的

main()方法,new對象等等,在加載階段會在內(nèi)存中生成一個代表這個類的

java.lang.Class對象,作為方法區(qū)這個類的各種數(shù)據(jù)的訪問入口

  • 驗證:校驗字節(jié)碼文件的正確性
  • 準(zhǔn)備:給類的靜態(tài)變量分配內(nèi)存,并賦予默認(rèn)值
  • 解析:將符號引用替換為直接引用,該階段會把一些靜態(tài)方法(符號引用,比如main()方法)替換為指向數(shù)據(jù)所存內(nèi)存的指針或句柄等(直接引用),這是所謂的靜態(tài)鏈接過程(類加載期間完成),動態(tài)鏈接是在程序運行期間完成的將符號引用替換為直接引用,下節(jié)課會講到動態(tài)鏈接
  • 初始化:對類的靜態(tài)變量初始化為指定的值,執(zhí)行靜態(tài)代碼塊

:類被加載到方法區(qū)中后主要包含 運行時常量池、類型信息、字段信息、方法信息、類加載器的引用、對應(yīng)class實例的引用等信息。類加載器的引用:這個類到類加載器實例的引用對應(yīng)class實例的引用:類加載器在加載類信息放到方法區(qū)中后,會創(chuàng)建一個對應(yīng)的Class 類型的對象實例放到堆(Heap)中, 作為開發(fā)人員訪問方法區(qū)中類定義的入口和切入點。

3.2 類加載器和雙親委派機(jī)制

上面的類加載過程主要是通過類加載器來實現(xiàn)的,Java里有如下幾種類加載器

  • 引導(dǎo)類加載器:負(fù)責(zé)加載支撐JVM運行的位于JRE的lib目錄下的核心類庫,比如rt.jar、charsets.jar等
  • 擴(kuò)展類加載器:負(fù)責(zé)加載支撐JVM運行的位于JRE的lib目錄下的ext擴(kuò)展目錄中的JAR類包
  • 應(yīng)用程序類加載器:負(fù)責(zé)加載ClassPath路徑下的類包,主要就是加載你自己寫的那些類
  • 自定義加載器:負(fù)責(zé)加載用戶自定義路徑下的類包

3.3 類加載器初始化過程

會創(chuàng)建JVM啟動器實例sun.misc.Launcher。

sun.misc.Launcher初始化使用了單例模式設(shè)計,保證一個JVM虛擬機(jī)內(nèi)只有一個 sun.misc.Launcher實例。

在Launcher構(gòu)造方法內(nèi)部,其創(chuàng)建了兩個類加載器,分別是 sun.misc.Launcher.ExtClassLoader(擴(kuò)展類加載器)和sun.misc.Launcher.AppClassLoader(應(yīng)用類加載器)。

JVM默認(rèn)使用Launcher的getClassLoader()方法返回的類加載器AppClassLoader的實例加載我們的應(yīng)用程序。

3.4 雙親委派機(jī)制

JVM類加載器是有親子層級結(jié)構(gòu)的,如下圖

在這里插入圖片描述

這里類加載其實就有一個雙親委派機(jī)制,加載某個類時會先委托父加載器尋找目標(biāo)類,找不到再委托上層父加載器加載,如果所有父加載器在自己的加載類路徑下都找不到目標(biāo)類,則在自己的類加載路徑中查找并載入目標(biāo)類。

雙親委派機(jī)制說簡單點就是,先找父親加載,不行再由兒子自己加載

3.5 為什么要設(shè)計雙親委派機(jī)制?

  • 沙箱安全機(jī)制:自己寫的java.lang.String.class類不會被加載,這樣便可以防止核心API庫被隨意篡改
  • 避免類的重復(fù)加載:當(dāng)父親已經(jīng)加載了該類時,就沒有必要子ClassLoader再加載一次,保證被加載類的唯一性

3.6 全盤負(fù)責(zé)委托機(jī)制

“全盤負(fù)責(zé)”是指當(dāng)一個ClassLoder裝載一個類時,除非顯示的使用另外一個ClassLoder,該類所依賴及引用的類也由這個ClassLoder載入。

4. Jvm各區(qū)域串聯(lián)

在這里插入圖片描述

在這里插入圖片描述

5. 總結(jié)

看完本章,大概對Jvm和Jvm結(jié)構(gòu)有大概了解,下面將繼續(xù)深入Jvm,未完待續(xù)~!希望大家可以多多關(guān)注腳本之家的其他內(nèi)容!

相關(guān)文章

  • 關(guān)于Spring中@Value注解使用和源碼分析

    關(guān)于Spring中@Value注解使用和源碼分析

    通過深入分析@Value注解的使用和源碼,本文詳細(xì)解釋了Spring如何解析@Value注解并為屬性賦值,首先,Spring會解析并收集所有被@Value注解修飾的屬性,這一過程依賴于AutowiredAnnotationBeanPostProcessor類
    2024-11-11
  • redisson分布式鎖的用法大全

    redisson分布式鎖的用法大全

    這篇文章主要介紹了redisson分布式鎖的用法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java?NIO實戰(zhàn)之多人聊天室

    Java?NIO實戰(zhàn)之多人聊天室

    這篇文章主要為大家詳細(xì)介紹了Java?NIO實戰(zhàn)之多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • java 反射機(jī)制詳解及實例代碼

    java 反射機(jī)制詳解及實例代碼

    這篇文章主要介紹了java 反射機(jī)制詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Spring的定時任務(wù)@Scheduled源碼詳解

    Spring的定時任務(wù)@Scheduled源碼詳解

    這篇文章主要介紹了Spring的定時任務(wù)@Scheduled源碼詳解,@Scheduled注解是包org.springframework.scheduling.annotation中的一個注解,主要是用來開啟定時任務(wù),本文提供了部分實現(xiàn)代碼與思路,需要的朋友可以參考下
    2023-09-09
  • Java多線程實現(xiàn)之Callable詳解

    Java多線程實現(xiàn)之Callable詳解

    這篇文章主要介紹了Java多線程實現(xiàn)之Callable詳解,Callable是一個接口,用于實現(xiàn)多線程,與實現(xiàn)Runnable類似,但是功能更強(qiáng)大,通過實現(xiàn)Callable接口,我們需要重寫call()方法,該方法可以在任務(wù)結(jié)束后提供一個返回值,需要的朋友可以參考下
    2023-08-08
  • IDEA @SpringBootApplication報錯原因及解決

    IDEA @SpringBootApplication報錯原因及解決

    這篇文章主要介紹了IDEA @SpringBootApplication報錯原因及解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot數(shù)據(jù)校驗功能的實現(xiàn)

    SpringBoot數(shù)據(jù)校驗功能的實現(xiàn)

    這篇文章主要介紹了SpringBoot數(shù)據(jù)校驗功能的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Thymeleaf 3.0 自定義標(biāo)簽方言屬性的實例講解

    Thymeleaf 3.0 自定義標(biāo)簽方言屬性的實例講解

    這篇文章主要介紹了Thymeleaf 3.0 自定義標(biāo)簽方言屬性的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 詳解Spring MVC CORS 跨域

    詳解Spring MVC CORS 跨域

    本篇文章主要介紹了詳解Spring MVC CORS 跨域 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

龙陵县| 天祝| 江阴市| 沅陵县| 封开县| 伽师县| 泾阳县| 太谷县| 荆州市| 鲁甸县| 团风县| 博乐市| 长泰县| 崇礼县| 阜宁县| 漯河市| 胶南市| 根河市| 汤原县| 湟源县| 凤城市| 陈巴尔虎旗| 青冈县| 泰兴市| 沽源县| 洮南市| 洛南县| 宜川县| 射阳县| 徐汇区| 甘孜县| 竹溪县| 铅山县| 聊城市| 武汉市| 广德县| 萨嘎县| 泽普县| 厦门市| 西昌市| 嘉定区|