摘要:框架說明開發(fā)者都知道會(huì)執(zhí)行字節(jié)碼。但是可能大多數(shù)人都不知道一個(gè)事實(shí)是的實(shí)現(xiàn),它分析字節(jié)碼,解釋并執(zhí)行代碼。執(zhí)行引擎字節(jié)碼加載到運(yùn)行時(shí)數(shù)據(jù)區(qū)后,會(huì)被執(zhí)行引擎執(zhí)行。解釋器更快的解釋字節(jié)碼,但是執(zhí)行非常慢。垃圾收集收集并移除不再被使用的對(duì)象。
JVM框架說明
java開發(fā)者都知道JRE(Java Runtime Environment)會(huì)執(zhí)行字節(jié)碼。但是可能大多數(shù)人都不知道一個(gè)事實(shí):JRE是JVM的實(shí)現(xiàn),它分析字節(jié)碼,解釋并執(zhí)行代碼。作為一個(gè)開發(fā)者,了解JVM的架構(gòu)是非常重要的,這會(huì)讓我們寫的代碼更有效率。本文會(huì)深入學(xué)習(xí)JVM架構(gòu)和它的各個(gè)重要組件。
什么是JVM虛擬機(jī)是物理機(jī)器的軟件實(shí)現(xiàn)。JAVA被設(shè)計(jì)成WORA(Write Once Run Anywhere), java程序是運(yùn)行在虛擬機(jī)上的。編譯器將java文件編譯成.class文件,然后將.class文件載入到JVM,這一步會(huì)加載和執(zhí)行class文件。下面的圖是展示了JVM的架構(gòu)。
JVM 架構(gòu)圖 JVM如何工作如上圖所示,jvm主要分成三個(gè)子系統(tǒng)
類加載系統(tǒng)
運(yùn)行時(shí)數(shù)據(jù)區(qū)
執(zhí)行引擎
類加載系統(tǒng)java的動(dòng)態(tài)類加載功能在類加載子系統(tǒng)中實(shí)現(xiàn)。當(dāng)?shù)谝淮卧谶\(yùn)行時(shí)(不是在編譯時(shí))涉及到一個(gè)class時(shí),它會(huì)加載,鏈接并初始化類文件。
加載:類會(huì)通過這個(gè)組件加載。根加載器(rt.jar),擴(kuò)展加載器(jrelibext)和系統(tǒng)加載器(classpath下的)是其主要的工具。
鏈接:主要分層三步
檢查:判斷其字節(jié)碼是否符合虛擬器要求
準(zhǔn)備:分配靜態(tài)變量的空間,同時(shí)賦缺省值
解析:解析符號(hào)鏈接,鏈接到方法區(qū)的引用上去。
初始化:給靜態(tài)變量賦初值,并執(zhí)行靜態(tài)代碼區(qū)
運(yùn)行時(shí)數(shù)據(jù)區(qū)運(yùn)行時(shí)數(shù)據(jù)區(qū)分成5個(gè)組件
方法區(qū):保存所有類數(shù)據(jù),包括靜態(tài)變量。一個(gè)jvm對(duì)應(yīng)一個(gè)方法區(qū)。
堆 :保存所有的對(duì)象,對(duì)象中的變量以及數(shù)組。一個(gè)jvm對(duì)應(yīng)一個(gè)堆。因?yàn)槎鄠€(gè)線程共享一個(gè)方法區(qū)和堆,所以數(shù)據(jù)保存不是線程安全的。
棧:每一個(gè)線程都會(huì)創(chuàng)建一個(gè)運(yùn)行時(shí)的棧。對(duì)于每一個(gè)方法調(diào)用,都會(huì)在棧中創(chuàng)建一個(gè)棧幀。棧中保存了所有的本地變量。棧是線程安全的,因?yàn)樗蔷€程獨(dú)享資源。
PC寄存器:每個(gè)線程有一個(gè)PC寄存器,用來記錄當(dāng)前執(zhí)行指令的地址,當(dāng)一條指令執(zhí)行完畢,它就會(huì)指向下一條指令。
本地方法棧:保存了本地方法的信息,每個(gè)線程會(huì)創(chuàng)建自己的本地方法棧。
執(zhí)行引擎字節(jié)碼加載到運(yùn)行時(shí)數(shù)據(jù)區(qū)后,會(huì)被執(zhí)行引擎執(zhí)行。執(zhí)行引擎讀取字節(jié)碼文件,逐個(gè)執(zhí)行。
解釋器:更快的解釋字節(jié)碼,但是執(zhí)行非常慢。其缺點(diǎn)是當(dāng)多次調(diào)用一個(gè)方法時(shí),每次都會(huì)創(chuàng)建新的解釋器。
JIT編譯器:JIT編譯器彌補(bǔ)了解釋器的缺點(diǎn)。執(zhí)行引擎會(huì)使用解釋器來轉(zhuǎn)換字節(jié)碼,當(dāng)發(fā)現(xiàn)重復(fù)的代碼時(shí)就會(huì)使用JIT編譯器,它會(huì)編譯整個(gè)字節(jié)碼,將之轉(zhuǎn)換為本地代碼,這個(gè)本地代碼會(huì)直接用于多次的方法調(diào)用,以此來改進(jìn)系統(tǒng)的性能。
垃圾收集:收集并移除不再被使用的對(duì)象??梢酝ㄟ^代碼system.gc()來觸發(fā)垃圾收集,
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67720.html
摘要:圖片含義如下源代碼程序編譯器編譯在執(zhí)行字節(jié)碼編譯器會(huì)將源代碼編譯成字節(jié)碼在虛擬機(jī)上執(zhí)行字節(jié)碼。字節(jié)碼只能在上執(zhí)行。的構(gòu)成要素的構(gòu)成如下圖所示每一欄分別的含義如下源程序字節(jié)碼編譯調(diào)試程序等源代碼由開發(fā)者編寫。 源自Javaの道日語技術(shù)社區(qū)原文地址譯者 夢(mèng)夢(mèng)的幻想鄉(xiāng)見てくれてありがとうござい?。?! はじめてのJava 初識(shí)Java 本章將會(huì)對(duì)Java的執(zhí)行順序、Java的構(gòu)成要素、Java...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
摘要:全文為這些年,我曾閱讀深入理解過或正在閱讀學(xué)習(xí)即將閱讀的一些優(yōu)秀經(jīng)典前端后端書籍。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 全文為這些年,我曾閱讀、深入理解過(或正在閱讀學(xué)習(xí)、即將閱讀)的一些優(yōu)秀經(jīng)典前端/Java后端書籍。全文為純?cè)瓌?chuàng),且將持續(xù)更新,未經(jīng)許可,不得進(jìn)行轉(zhuǎn)載。當(dāng)然,如果您喜歡這篇文章,可以動(dòng)手點(diǎn)點(diǎn)贊或者收藏。 基礎(chǔ) 基礎(chǔ)書籍 進(jìn)階 進(jìn)階階段,深入學(xué)習(xí)的書...
閱讀 4154·2021-11-17 09:33
閱讀 3345·2021-10-08 10:05
閱讀 3265·2021-09-22 15:36
閱讀 1231·2021-09-06 15:02
閱讀 2835·2019-08-29 12:45
閱讀 1648·2019-08-26 13:40
閱讀 3498·2019-08-26 13:37
閱讀 491·2019-08-26 13:37