日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java虚拟机的体系结构

發(fā)布時(shí)間:2024/4/17 java 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java虚拟机的体系结构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java虛擬機(jī)由如下五個(gè)部分組成:

? ? 一組指令集

? ?一組寄存器

? 一個(gè)棧

? 一個(gè)無(wú)用單元收集堆

? 一個(gè)方法區(qū)

1.Java指令集

? ?Java虛擬機(jī)支持大約248個(gè)字節(jié)碼,每個(gè)字節(jié)碼執(zhí)行一種基本的CPU運(yùn)算,例如把一個(gè)整數(shù)加到寄存器、子程序轉(zhuǎn)移等。Java指令集相當(dāng)于Java程序的匯編語(yǔ)言。

? ?虛擬機(jī)的內(nèi)層循環(huán)執(zhí)行過(guò)程如下:

? do{

? ? ? ? ? ? ?取一個(gè)操作符字節(jié);

? ? ? ? ? ? ?根據(jù)操作符的值執(zhí)行一個(gè)動(dòng)作;

? ? ?}while(程序未結(jié)束)

2.寄存器

?java虛擬機(jī)的寄存器用于保存機(jī)器的運(yùn)行狀體,與微處理器中的某些專(zhuān)用寄存器類(lèi)似,所有寄存器都是32位的。在java虛擬機(jī)中有如下4種寄存器。

? ? ? ?pc:java程序計(jì)數(shù)器

? ? ? ?optop:指向操作數(shù)棧頂端的指針

? ? ? ?frame: 指向當(dāng)前指向方法的執(zhí)行環(huán)境的指針

? ? ? ?vars:指向當(dāng)前指向方法的局部變量區(qū)第一個(gè)變量的指針。java虛擬機(jī)是棧式的,它不定義或使用寄存器來(lái)傳遞或接收參數(shù),目的是保證指令集的簡(jiǎn)潔性和實(shí)現(xiàn)時(shí)的高效性。

3.棧

? Java虛擬機(jī)中的棧有三個(gè)區(qū)域,分別是局部變量區(qū)、運(yùn)行環(huán)境區(qū)、操作數(shù)區(qū)。

1.局部變量區(qū)

? ? 每個(gè)Java方法使用一個(gè)固定大小的局部變臉就,長(zhǎng)整數(shù)和雙精度占據(jù)兩個(gè)局部變量的空間,安裝第一個(gè)局部變量索引來(lái)尋址(如,一個(gè)具有索引n的局部變量,如果是一個(gè)雙精度浮點(diǎn)數(shù),時(shí)間占據(jù)了n和n+1所代表的存儲(chǔ)空間)。

?2.運(yùn)行環(huán)境區(qū)

在運(yùn)行環(huán)境中包含的信息可以實(shí)現(xiàn)動(dòng)態(tài)鏈接、正常方法區(qū)返回與異常和錯(cuò)誤的傳播

? ?2.1.動(dòng)態(tài)鏈接

? ?運(yùn)行環(huán)境包括對(duì)指向當(dāng)前類(lèi)和當(dāng)前方法的解釋器符號(hào)表的指針,用于支持方法代碼的動(dòng)態(tài)鏈接。方法class文件代碼在引用要調(diào)用的方法和要訪問(wèn)的變量時(shí)使用符號(hào)。動(dòng)態(tài)鏈接把符號(hào)形式的方法調(diào)用翻譯成實(shí)際方法調(diào)用,裝載必要的類(lèi)以解釋還沒(méi)有定義的符號(hào)。

? ? 2.2.正常的方法返回

? ?執(zhí)行了具有正確類(lèi)型的返回指令時(shí),調(diào)用的方法會(huì)得到一個(gè)返回值。

? ?2. 3.異常和錯(cuò)誤傳播

? ?異常情況在Java中被稱(chēng)作Error或異常,是Throwable類(lèi)的子類(lèi),在程序中:

? ?2.3.1.動(dòng)態(tài)鏈接錯(cuò)

? ?2.3.2.運(yùn)行時(shí)錯(cuò),如對(duì)一個(gè)空指針的引用程序使用了throw語(yǔ)句

3.操作數(shù)棧區(qū)

? ? 機(jī)器指令只從操作數(shù)棧中去操作數(shù),對(duì)它們進(jìn)行操作,并把結(jié)果返回到棧中。選擇棧結(jié)構(gòu)的原因是:在只有少量寄存器或非通用寄存器的機(jī)器上,也能夠高效的模擬虛擬機(jī)的行為。

4.無(wú)用單元收集堆

? ? ? Java的堆是一個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū),類(lèi)的實(shí)例從中分配空間。

5.方法區(qū)

它保存方法代碼和符號(hào)表。方法代碼不包括在無(wú)用單元收集堆中。

? ?每個(gè)Java虛擬機(jī)實(shí)例都有一個(gè)方法區(qū)以及一個(gè)堆,它們是由該虛擬機(jī)實(shí)例中所有線程共享的。當(dāng)虛擬機(jī)裝載一個(gè)class文件時(shí),他會(huì)從這個(gè)class文件所包含的二進(jìn)制數(shù)據(jù)中解析類(lèi)型信息。創(chuàng)建的對(duì)象放到堆中。


? ?java虛擬機(jī)沒(méi)有寄存器,其指令集使用java棧來(lái)存儲(chǔ)中間數(shù)據(jù)。這樣設(shè)計(jì)的原因是保存java虛擬機(jī)的指令集盡量緊湊,同時(shí)也便于Java虛擬機(jī)在那些很少通用寄存器的平臺(tái)上實(shí)現(xiàn),另外Java虛擬機(jī)是基于棧的體系結(jié)構(gòu)的,有助于運(yùn)行時(shí)某些虛擬機(jī)實(shí)現(xiàn)動(dòng)態(tài)編譯器和即使編譯器的代碼優(yōu)化。

? ? ? ? 任何線程都不能訪問(wèn)另外一個(gè)線程的Pc寄存器或者Java棧。



??

總結(jié)

以上是生活随笔為你收集整理的Java虚拟机的体系结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。