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

歡迎訪問 生活随笔!

生活随笔

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

java

Java虚拟机的体系结构

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

java虛擬機由如下五個部分組成:

? ? 一組指令集

? ?一組寄存器

? 一個棧

? 一個無用單元收集堆

? 一個方法區(qū)

1.Java指令集

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

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

? do{

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

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

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

2.寄存器

?java虛擬機的寄存器用于保存機器的運行狀體,與微處理器中的某些專用寄存器類似,所有寄存器都是32位的。在java虛擬機中有如下4種寄存器。

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

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

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

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

3.棧

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

1.局部變量區(qū)

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

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

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

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

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

? ? 2.2.正常的方法返回

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

? ?2. 3.異常和錯誤傳播

? ?異常情況在Java中被稱作Error或異常,是Throwable類的子類,在程序中:

? ?2.3.1.動態(tài)鏈接錯

? ?2.3.2.運行時錯,如對一個空指針的引用程序使用了throw語句

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

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

4.無用單元收集堆

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

5.方法區(qū)

它保存方法代碼和符號表。方法代碼不包括在無用單元收集堆中。

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


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

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



??

總結(jié)

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

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