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

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

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

1 JVM簡(jiǎn)介

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

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

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

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

2 JVM的生命周期

2.1 啟動(dòng)

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

啟動(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()來(lái)退出。
  3. 程序所在平臺(tái)強(qiáng)制結(jié)束JVM進(jìn)程

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

3.1 JVM組成

主要分成三塊:

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

注意:

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

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

3.1 JVM各模塊簡(jiǎn)介

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

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

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

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

總結(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)批量插入的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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à)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • spring boot 不連接數(shù)據(jù)庫(kù)啟動(dòng)的解決

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

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了如何基于js及java分析并封裝排序算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(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)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java實(shí)現(xiàn)的各種排序算法(插入排序、選擇排序算法、冒泡排序算法)

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

    本文是小編給大家?guī)?lái)的java各種排序算法知識(shí),包括插入排序、選擇排序算法、冒泡排序算法,代碼簡(jiǎn)單易懂,需要的朋友可以參考下
    2016-08-08

最新評(píng)論

泸溪县| 那坡县| 青海省| 罗山县| 黔东| 沅江市| 平谷区| 三亚市| 城市| 佛山市| 沙雅县| 福清市| 蓝田县| 葫芦岛市| 平乡县| 东方市| 崇阳县| 尼木县| 德惠市| 崇文区| 兴化市| 普陀区| 佳木斯市| 无锡市| 南昌市| 成武县| 固始县| 南丰县| 临高县| 孝昌县| 瑞昌市| 乌苏市| 壤塘县| 浦东新区| 阿勒泰市| 增城市| 芷江| 靖西县| 广灵县| 台江县| 黎川县|