java Java虛擬機(jī)體系結(jié)構(gòu)由幾部分組成?
Java虛擬機(jī)體系結(jié)構(gòu)由幾部分組成?類文件通過類加載子系統(tǒng)將信息存儲(chǔ)到運(yùn)行時(shí)數(shù)據(jù)區(qū)(包括方法區(qū)、堆、Java堆棧、程序計(jì)數(shù)器和本地方法堆棧),執(zhí)行引擎通過一定的規(guī)范解釋執(zhí)行。本地方法還可以通過執(zhí)行引擎
Java虛擬機(jī)體系結(jié)構(gòu)由幾部分組成?
類文件通過類加載子系統(tǒng)將信息存儲(chǔ)到運(yùn)行時(shí)數(shù)據(jù)區(qū)(包括方法區(qū)、堆、Java堆棧、程序計(jì)數(shù)器和本地方法堆棧),執(zhí)行引擎通過一定的規(guī)范解釋執(zhí)行。本地方法還可以通過執(zhí)行引擎自己調(diào)用運(yùn)行時(shí)數(shù)據(jù)區(qū)域。
Classloader是JVM的一個(gè)子系統(tǒng),用于加載類文件。
它存儲(chǔ)每個(gè)類結(jié)構(gòu),例如運(yùn)行時(shí)常量池、字段和方法數(shù)據(jù)、方法代碼等
它是分配對象的運(yùn)行時(shí)數(shù)據(jù)區(qū)域。
它存儲(chǔ)局部變量和部分結(jié)果,并在方法調(diào)用和返回中發(fā)揮作用。每個(gè)線程都有一個(gè)私有JVM堆棧,同時(shí)創(chuàng)建一個(gè)線程。每次調(diào)用方法時(shí),都會(huì)創(chuàng)建一個(gè)新框架。框架在其方法調(diào)用完成時(shí)被銷毀。
程序計(jì)數(shù)器,其中包含當(dāng)前正在執(zhí)行的Java虛擬機(jī)指令的地址。
它包含應(yīng)用程序中使用的所有本地方法。
執(zhí)行引擎包括:虛擬處理器、解釋器、JIT編譯器
Java虛擬機(jī)的功能是執(zhí)行Java字節(jié)碼,其編碼實(shí)現(xiàn)是死循環(huán)。每個(gè)循環(huán)都是獲取字節(jié)碼并執(zhí)行字節(jié)碼的過程,因此與其他程序沒有本質(zhì)區(qū)別。主流的JavaVM大多是用C語言實(shí)現(xiàn)的,然后用匯編語言輔助實(shí)現(xiàn),用Java實(shí)現(xiàn)JavaVM的情況有一些,但不多。
下面是使用C語言在智能設(shè)備中實(shí)現(xiàn)虛擬機(jī)的一個(gè)片段。
此代碼是短加法字節(jié)碼的實(shí)現(xiàn)。
這段代碼只是獲取字節(jié)碼并執(zhí)行它。你認(rèn)為JavaVM就是這樣嗎。
為了優(yōu)化虛擬機(jī)的效率,很多人選擇用匯編的方式重寫執(zhí)行頻率高的代碼。
小結(jié)是C語言實(shí)現(xiàn)的許多,將與匯編結(jié)合起來作為輔助工具。有其他語言,但不是主流。