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

Java JVM的基本概念、結(jié)構(gòu)、生命周期詳解

 更新時(shí)間:2025年05月16日 08:55:51   作者:劉Java  
這篇文章主要介紹了Java JVM的基本概念、結(jié)構(gòu)、生命周期使用,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1 JVM簡介

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

引入Java語言虛擬機(jī)JVM后,Java語言在不同平臺上運(yùn)行時(shí)不需要重新編譯。JVM在執(zhí)行字節(jié)碼時(shí),實(shí)際上最終還是把字節(jié)碼解釋成具體平臺上的機(jī)器指令執(zhí)行,因此屏蔽了與具體平臺(win、mac)相關(guān)的信息,使得只需要一份字節(jié)碼文件,就可以在多種平臺上不加修改地運(yùn)行。

不僅如此,現(xiàn)在的JVM還實(shí)現(xiàn)了語言的無關(guān)性,Scala、Kotlin、Groovy等語言都可以使用JVM運(yùn)行。

編譯后被Java虛擬機(jī)所執(zhí)行的代碼使用了一種平臺中立(不依賴于特定硬件及操作系統(tǒng))的二進(jìn)制格式來表示, 并且經(jīng)常(但并非絕對)以文件的形式存儲(chǔ), 因此這種格式稱為class 文件格式。 實(shí)際上JVM的平臺、語言無關(guān)性的上層原因也是因?yàn)?class文件格式的平臺、語言無關(guān)性。

2 JVM的生命周期

2.1 啟動(dòng)

JVM實(shí)例對應(yīng)了一個(gè)獨(dú)立運(yùn)行的java程序,它是進(jìn)程級別。

啟動(dòng)一個(gè)Java程序時(shí),會(huì)首先建立一個(gè)JVM實(shí)例,任何一個(gè)擁有public static void main(String[] args)函數(shù)的class都可以作為JVM實(shí)例運(yùn)行的起點(diǎn)

2.2 運(yùn)行

main()作為該程序初始線程的起點(diǎn),任何其他線程均由該線程啟動(dòng)。

JVM內(nèi)部有兩種線程:守護(hù)線程和非守護(hù)線程,main()屬于非守護(hù)線程,守護(hù)線程通常由JVM自己使用,java程序也可以標(biāo)明自己創(chuàng)建的線程是守護(hù)線程(Thread的setDaemon(true)方法)。

2.3 消亡

  1. 當(dāng)程序中的所有非守護(hù)線程都終止時(shí),JVM退出;
  2. 若安全管理器允許,程序也可以使用System.exit(0)或 Runtime.getRuntime().exit()來退出。
  3. 程序所在平臺強(qiáng)制結(jié)束JVM進(jìn)程

3 JVM的體系結(jié)構(gòu)

3.1 JVM組成

主要分成三塊:

  • 類裝載器(ClassLoader)(用來裝載.class文件)
  • 執(zhí)行引擎(執(zhí)行字節(jié)碼,或者執(zhí)行本地方法)
  • 運(yùn)行時(shí)數(shù)據(jù)區(qū)(方法區(qū)、堆、java棧、PC寄存器、本地方法棧)

注意:

java編譯器把java源文件(.java文件)編譯成字節(jié)碼文件(.class文件),然后JVM對字節(jié)碼文件進(jìn)行加載、解釋執(zhí)行。

java的源代碼是無法直接在JVM上運(yùn)行的,Java編譯器在JDK中,可以使用javac命令對Java源文件進(jìn)行編譯。

3.1 JVM各模塊簡介

我們的后續(xù)學(xué)習(xí)主要學(xué)習(xí)的內(nèi)容是JVM的類加載機(jī)制、運(yùn)行時(shí)數(shù)據(jù)區(qū)域、GC機(jī)制、執(zhí)行引擎機(jī)制、以及一些JVM優(yōu)化。

對于源文件的編譯,并不屬于JVM的范疇,編譯原理的內(nèi)容比較復(fù)雜,但是我們可以了解一下,Java源代碼編譯大概步驟為:

生成的字節(jié)碼文件中包含結(jié)構(gòu)信息、元數(shù)據(jù)、方法信息等,具體的字節(jié)碼結(jié)構(gòu)在類文件結(jié)構(gòu)部分。深入了解編譯器可以看《自己動(dòng)手實(shí)現(xiàn)jvm》、《編譯原理》等書。

JVM對Java字節(jié)碼進(jìn)行加載、執(zhí)行,JVM的類加載是通過ClassLoader及其子類來完成的,執(zhí)行的過程抽象如下:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis動(dòng)態(tài)SQL foreach標(biāo)簽實(shí)現(xiàn)批量插入的方法示例

    MyBatis動(dòng)態(tài)SQL foreach標(biāo)簽實(shí)現(xiàn)批量插入的方法示例

    這篇文章主要介紹了MyBatis動(dòng)態(tài)SQL foreach標(biāo)簽實(shí)現(xiàn)批量插入的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Springboot項(xiàng)目啟動(dòng)時(shí)如何用命令動(dòng)態(tài)指定環(huán)境

    Springboot項(xiàng)目啟動(dòng)時(shí)如何用命令動(dòng)態(tài)指定環(huán)境

    這篇文章主要介紹了Springboot項(xiàng)目啟動(dòng)時(shí)如何用命令動(dòng)態(tài)指定環(huán)境的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • spring boot 不連接數(shù)據(jù)庫啟動(dòng)的解決

    spring boot 不連接數(shù)據(jù)庫啟動(dòng)的解決

    這篇文章主要介紹了spring boot 不連接數(shù)據(jù)庫啟動(dòng)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • javaweb如何使用華為云短信通知公共類調(diào)用

    javaweb如何使用華為云短信通知公共類調(diào)用

    這篇文章主要介紹了javaweb使用華為云短信通知公共類調(diào)用的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java UDP實(shí)現(xiàn)一個(gè)聊天工具的示例代碼

    java UDP實(shí)現(xiàn)一個(gè)聊天工具的示例代碼

    這篇文章主要介紹了java UDP實(shí)現(xiàn)一個(gè)聊天工具的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • RocketMQ事務(wù)消息使用與原理詳解

    RocketMQ事務(wù)消息使用與原理詳解

    這篇文章主要為大家介紹了RocketMQ事務(wù)消息的實(shí)現(xiàn)原理,在分布式事務(wù)解決方案中,事務(wù)消息也是一個(gè)不錯(cuò)的解決方案,本篇文章將圍繞RocketMQ的事務(wù)消息實(shí)現(xiàn)展開描述,需要的朋友可以參考下
    2023-07-07
  • IDEA中Maven的一些常用操作指南

    IDEA中Maven的一些常用操作指南

    intellij idea是一款很流行好用的集成開發(fā)環(huán)境軟件,maven是使用很廣泛的構(gòu)建工具,java開發(fā)者日常少不了與這兩種工具打交道,下面這篇文章主要給大家介紹了關(guān)于IDEA中Maven的一些常用操作指南,需要的朋友可以參考下
    2024-06-06
  • 如何基于js及java分析并封裝排序算法

    如何基于js及java分析并封裝排序算法

    這篇文章主要介紹了如何基于js及java分析并封裝排序算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解

    mybatis-xml映射文件及mybatis動(dòng)態(tài)sql詳解

    XML映射文件的名稱與Mapper接口名稱一致,并且將XML映射文件和Mapper接口放置在相同包下(同包同名),這篇文章主要介紹了mybatis-xml映射文件及mybatis動(dòng)態(tài)sql的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java實(shí)現(xiàn)的各種排序算法(插入排序、選擇排序算法、冒泡排序算法)

    Java實(shí)現(xiàn)的各種排序算法(插入排序、選擇排序算法、冒泡排序算法)

    本文是小編給大家?guī)淼膉ava各種排序算法知識,包括插入排序、選擇排序算法、冒泡排序算法,代碼簡單易懂,需要的朋友可以參考下
    2016-08-08

最新評論

永昌县| 梅州市| 方山县| 永善县| 富蕴县| 射阳县| 南皮县| 旺苍县| 临颍县| 邮箱| 曲麻莱县| 乌苏市| 丹东市| 石棉县| 来宾市| 宝清县| 永川市| 柘城县| 兴化市| 专栏| 中西区| 大埔县| 商丘市| 阳谷县| 榕江县| 平南县| 无为县| 保定市| 宁明县| 嫩江县| 英吉沙县| 基隆市| 恩平市| 吉水县| 同仁县| 康定县| 敦化市| 玛纳斯县| 舞钢市| 蒲城县| 灵丘县|