JVM體系結(jié)構(gòu)與工作方式
《深入分析Java Web 技術(shù)內(nèi)幕》 第七章 VM體系結(jié)構(gòu)與工作方式 讀書(shū)筆記
7.1 JVM體系結(jié)構(gòu)
何謂JVM
JVM(Java Virtual Machine) 通過(guò)模擬一個(gè)計(jì)算機(jī)來(lái)達(dá)到一個(gè)計(jì)算機(jī)所具有的計(jì)算功能
指令集:計(jì)算機(jī)所能識(shí)別的機(jī)器語(yǔ)言的命令集合
計(jì)算單元:能識(shí)別并且控制指令執(zhí)行的功能模塊
尋址方式:地址的位數(shù)、最小地址和最大地址范圍,以及地址的運(yùn)行規(guī)則
寄存器:包括操作數(shù)寄存器、變址寄存器、控制寄存器等的定義、數(shù)量和使用方式
存儲(chǔ)單元:能夠存儲(chǔ)操作數(shù)寄存器和保存操作結(jié)構(gòu)的單元
指令集與匯編語(yǔ)言:
指令集:可以直接執(zhí)行的二進(jìn)制代碼;
匯編語(yǔ)言:與二進(jìn)制代碼對(duì)應(yīng)的的助記符;
JVM 體系結(jié)構(gòu)詳解
1、類加載器:在JVM啟動(dòng)時(shí)或者在類運(yùn)行時(shí)將需要的class加載到JVM中
2、執(zhí)行引擎:負(fù)責(zé)執(zhí)行class文件中包含的字節(jié)碼指令集,相當(dāng)于cpu
3、內(nèi)存區(qū):將內(nèi)存劃分成若干個(gè)區(qū)以模擬實(shí)際機(jī)器上的存儲(chǔ)、記錄和調(diào)度功能模塊
4、本地方法調(diào)用:調(diào)用C或者C++實(shí)現(xiàn)的本地方法代碼返回結(jié)果
7.2 JVM工作機(jī)制
機(jī)器如何執(zhí)行代碼,一般程序運(yùn)行到執(zhí)行的過(guò)程:
源代碼——>預(yù)處理——>編譯器——>匯編程序——>目標(biāo)代碼——>鏈接器——>可執(zhí)行程序
基本運(yùn)算分解為二進(jìn)制位運(yùn)算,這些運(yùn)算又通過(guò)指令來(lái)完成,而指令的核心目的是確定需要運(yùn)算的種類(操作碼)和運(yùn)算需要的數(shù)據(jù)(操作數(shù)),以及從哪里來(lái)(寄存器或棧)獲取操作數(shù)、將運(yùn)算結(jié)果放到什么地方(寄存器或棧)
JVM為何選擇基于棧的架構(gòu)
所有操作數(shù)必須先入棧,再根據(jù)指令中的操作碼選擇從棧頂彈出若干個(gè)元素進(jìn)行計(jì)算后壓入棧中。JVM中操作數(shù)可以存放在每一個(gè)棧頂中的一個(gè)本地變量集中,即每個(gè)方法調(diào)用時(shí)就會(huì)給這個(gè)方法分配一個(gè)本地變量集,這個(gè)變量集在編譯時(shí)已經(jīng)確定,所以操作數(shù)入棧可以直接是常量入?;驈谋镜刈兞考腥∫粋€(gè)變量壓入棧中。
理由:1、跨平臺(tái)2、java源文件編譯成class文件,編譯器一般采用以棧為基礎(chǔ)的結(jié)構(gòu)向連接器或者優(yōu)化器傳遞這種編譯的中間結(jié)果,JVM可以作為連接器使用,也可作為優(yōu)化器使用3、為了指令集的緊湊性(常量池)
執(zhí)行引擎的架構(gòu)設(shè)計(jì)
每當(dāng)創(chuàng)建一個(gè)新的線程,JVM會(huì)為這個(gè)線程創(chuàng)建一個(gè)Java棧,同時(shí)會(huì)為這個(gè)線程分配一個(gè)PC寄存器,并且這個(gè)PC寄存器會(huì)指向這個(gè)線程的第一行可執(zhí)行代碼。每當(dāng)調(diào)用一個(gè)新的方法時(shí)會(huì)在這個(gè)棧上創(chuàng)建一個(gè)新的棧幀數(shù)據(jù)結(jié)構(gòu),以便保留此方法的元信息。
最后:小編 整理啦很多的有關(guān)于jvm集合的知識(shí)點(diǎn),其中包含有:Map、List、Set、以及其Iterator,Comparator,Cloneable等相關(guān)的知識(shí)!

有需要的朋友,幫忙點(diǎn)贊關(guān)注三連?。≡谠u(píng)論下方發(fā)送:【666】
100%回復(fù)你哦!