第一章_JVM和java體系結(jié)構(gòu)
1.java和JVM簡(jiǎn)介
1.1Java
Java是一門跨平臺(tái)的語(yǔ)言
Java 語(yǔ)言的特點(diǎn)包括:
- 跨平臺(tái)性:Java 程序可以在不同操作系統(tǒng)上運(yùn)行,只需安裝對(duì)應(yīng)平臺(tái)的 Java 虛擬機(jī)(JVM)即可。
- 面向?qū)ο?/mark>:Java 是一種純粹的面向?qū)ο缶幊陶Z(yǔ)言,支持封裝、繼承、多態(tài)等面向?qū)ο筇匦浴?/li>
- 健壯性:Java 在設(shè)計(jì)時(shí)考慮了許多安全檢查,如內(nèi)存管理、異常處理等,以確保程序的穩(wěn)定性和可靠性。
- 安全性:Java 提供了安全管理機(jī)制,可以防止惡意代碼對(duì)系統(tǒng)造成危害。
- 高性能:Java 通過(guò)即時(shí)編譯等技術(shù)提高了執(zhí)行效率,適用于需要高性能的應(yīng)用場(chǎng)景。
1.2JVM
JVM 是 Java 程序的運(yùn)行環(huán)境,它負(fù)責(zé)將 Java 字節(jié)碼翻譯成特定平臺(tái)的機(jī)器碼并執(zhí)行。
JVM 還提供了垃圾回收、內(nèi)存管理等功能,幫助開(kāi)發(fā)者更輕松地管理程序的執(zhí)行。
2.Java文件編譯過(guò)程
- 程序員編寫的.java文件
- 由javac編譯成字節(jié)碼文件.class:(為什么編譯成class文件,因?yàn)镴VM只認(rèn)識(shí).class文件)
- 在由JVM編譯成電腦認(rèn)識(shí)的文件(0101010101) (對(duì)于電腦系統(tǒng)來(lái)說(shuō) 文件代表一切)
3.JVM整體結(jié)構(gòu)
- 類加載器子系統(tǒng)(Class Loader Subsystem):
- 類加載器負(fù)責(zé)加載類文件到內(nèi)存中,并生成對(duì)應(yīng)的 Class 對(duì)象。類加載器按照特定的規(guī)則從不同的位置加載類文件,如文件系統(tǒng)、網(wǎng)絡(luò)等。
- 類加載器通常包括啟動(dòng)類加載器(Bootstrap Class Loader)、擴(kuò)展類加載器(Extension Class Loader)和應(yīng)用程序類加載器(Application Class Loader)等層次。
- 運(yùn)行時(shí)數(shù)據(jù)區(qū)(Runtime Data Area):
- 方法區(qū)(Method Area):存儲(chǔ)類的元信息、靜態(tài)變量、常量池等數(shù)據(jù)。
- 堆(Heap):存儲(chǔ)對(duì)象實(shí)例以及數(shù)組。
- 棧(Stack):存儲(chǔ)局部變量、操作數(shù)棧、方法返回地址等。
- 程序計(jì)數(shù)器(Program Counter Register):記錄當(dāng)前線程執(zhí)行的字節(jié)碼指令地址。
- 本地方法棧(Native Method Stack):為執(zhí)行本地方法服務(wù)。
- 執(zhí)行引擎(Execution Engine):
- 解釋器(Interpreter):逐行解釋字節(jié)碼并執(zhí)行對(duì)應(yīng)的本地機(jī)器指令。
- 即時(shí)編譯器(Just-In-Time Compiler,JIT):將熱點(diǎn)代碼(頻繁執(zhí)行的代碼段)編譯成本地機(jī)器碼,提高執(zhí)行效率。
- 本地方法接口(Native Interface):
- 提供了與底層 C/C++ 等語(yǔ)言交互的能力,允許 Java 調(diào)用本地方法。
- 本地方法庫(kù)(Native Method Libraries):
- 包含了一些與平臺(tái)相關(guān)的本地庫(kù)和方法,用于支持 JVM 的底層操作。
4.JVM生命周期
虛擬機(jī)的啟動(dòng)
通過(guò)引導(dǎo)類加載器(bootstrap class loader)創(chuàng)建一個(gè)初始類來(lái)完成,這個(gè)類是由虛擬機(jī)的具體實(shí)現(xiàn)指定的。
虛擬機(jī)的執(zhí)行
- 一個(gè)運(yùn)行中的java虛擬機(jī)有這一個(gè)清晰地任務(wù),執(zhí)行java程序
- 程序開(kāi)始執(zhí)行時(shí)他才運(yùn)行,程序結(jié)束時(shí)它就停止
- 執(zhí)行一個(gè)所謂的java程序的時(shí)候,真真正正在執(zhí)行的是一個(gè)叫做java虛擬機(jī)的進(jìn)程
虛擬機(jī)的退出程序正常執(zhí)行結(jié)束
- 程序在執(zhí)行過(guò)程中遇到了異常會(huì)錯(cuò)誤而終止
- 由于操作系統(tǒng)出現(xiàn)錯(cuò)誤而導(dǎo)致java虛擬機(jī)進(jìn)程終止
- 某線程調(diào)用Runtime類或Systen類的exit方法,或Runtime類的halt方法,并且java安全管理器也允許這次exit或halt操作。
- 除此之外,JNI規(guī)范描述了用JNI Invocation API來(lái)加載或卸載Java虛擬機(jī)時(shí),jaca虛擬機(jī)的退出情況
5.JVM發(fā)展進(jìn)程
Sun Classic VM
- 世界上第一款商用java虛擬機(jī)
- 虛擬機(jī)內(nèi)部只提供解釋器
- 現(xiàn)在的hotspot內(nèi)置了此虛擬機(jī)
Exact VM
- 可以知道內(nèi)存中某個(gè)位置的數(shù)據(jù)具體是什么類型
- 具備現(xiàn)代高性能虛擬機(jī)的雛形:熱點(diǎn)探測(cè)+編譯器和解釋器混合工作模式
HotSpot VM
- JDK1.3時(shí),成為默認(rèn)虛擬機(jī)
- 在服務(wù)器端,桌面到移動(dòng)端,嵌入式都有應(yīng)用
- Hotspot指的就是熱點(diǎn)代碼探測(cè)技術(shù)
JRockit
- 專注于服務(wù)器端應(yīng)用
- 內(nèi)部不包含解析器實(shí)現(xiàn)
- 是世界上最快的JVM
J9
- 有影響力的三大商用虛擬機(jī)之一
- 服務(wù)器端,桌面應(yīng)用,嵌入式等多用途VM
Azul VM
- 無(wú)停頓垃圾回收
- 與特定硬件平臺(tái)綁定,軟硬件配合的專有虛擬機(jī)
- 可預(yù)測(cè)性
- 適用于大內(nèi)存應(yīng)用
Liquid VM
Taoban JVM文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-830978.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-830978.html
6.JDK發(fā)展路程
- JDK 1.0(1996年):最初版本的 Java 開(kāi)發(fā)工具包中包含了最基本的 JVM,實(shí)現(xiàn)了 Java 語(yǔ)言的基本功能。
- JDK 1.2(1998年):引入了 Just-In-Time 編譯器(JIT),提高了 Java 程序的性能。
- JDK 1.3(2000年):增加了 Java HotSpot 虛擬機(jī),引入了即時(shí)編譯器技術(shù),進(jìn)一步提升了性能。
- JDK 1.4(2002年):引入了新的垃圾回收器(包括并行回收器和分代回收器),改善了內(nèi)存管理和回收效率。
- JDK 5.0(2004年):引入了泛型、枚舉、自動(dòng)裝箱拆箱等新特性,對(duì)虛擬機(jī)也做了優(yōu)化和改進(jìn)。
- JDK 6(2006年):增加了 G1 垃圾回收器,改進(jìn)了性能和可靠性。
- JDK 7(2011年):引入了新的垃圾回收器(G1 GC)、InvokeDynamic 指令等功能,提高了性能和靈活性。
- JDK 8(2014年):引入了 Lambda 表達(dá)式、Stream API 等新特性,同時(shí)對(duì)虛擬機(jī)進(jìn)行了性能優(yōu)化。
- JDK 9(2017年):引入了模塊化系統(tǒng)(Jigsaw)、改進(jìn)了垃圾回收器、優(yōu)化了性能等。
- JDK 10、11、12、13、14、15、16、17、18:每個(gè)版本都帶來(lái)了新的特性、改進(jìn)和優(yōu)化,如局部變量類型推斷、ZGC 垃圾回收器、Shenandoah 垃圾回收器等。
到了這里,關(guān)于【從零開(kāi)始學(xué)JVM】第一章_JVM和java體系結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!