欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Java虛擬機簡(jiǎn)介[宇宙論壇]
Java虛擬機簡(jiǎn)介

一、什么是Java虛擬機⑴
Java虛擬機是一個(gè)想象中的機器,在實(shí)際的計算機上通過(guò)軟件模擬來(lái)實(shí)現。Java虛擬機
有自己想象中的硬件,如處理器、堆棧、寄存器等,還具有相應的指令系統。
1.為什么要使用Java虛擬機?
Java語(yǔ)言的一個(gè)非常重要的特點(diǎn)就是與平臺的無(wú)關(guān)性。而使用Java虛擬機是實(shí)現這一
特點(diǎn)的關(guān)鍵。
一般的高級語(yǔ)言如果要在不同的平臺上運行,至少需要編譯成不同的目標代碼。而引
入Java語(yǔ)言虛擬機后,Java語(yǔ)言在不同平臺上運行時(shí)不需要重新編譯,如圖所示。
圖Java語(yǔ)言使用模式
Java虛擬機屏蔽了與具體平臺相關(guān)的信息,使得Java語(yǔ)言編譯程序只需生成在Java虛擬
機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。Java虛擬機在執行

節碼時(shí),把字節碼解釋成具體平臺上的機器指令執行。
2.誰(shuí)需要了解Java虛擬機⑴
Java虛擬機是Java語(yǔ)言底層實(shí)現的基礎,對Java語(yǔ)言感興趣的人都應對Java虛擬機有個(gè)大

概的了解。這有助于理解Java語(yǔ)言的一些性質(zhì),也有助于使用Java語(yǔ)言。
對于要在特定平臺上實(shí)現Java虛擬機的軟件人員,Java語(yǔ)言的編譯器作者以及要用硬件
芯片實(shí)現Java虛擬機的人來(lái)說(shuō),則必須深刻理解Java虛擬機的規范。另外,如果你想擴展

Java語(yǔ)言,或是把其它語(yǔ)言編譯成Java語(yǔ)言的字節碼,你也需要深入地了解Java虛擬機。

3.Java虛擬機支持的數據類(lèi)型
Java虛擬機支持Java語(yǔ)言的基本數據類(lèi)型如下:
byte://1字節有符號整數的補碼
short://2字節有符號整數的補碼
int://4字節有符號整數的補碼
long://8字節有符號整數的補碼
float://4字節IEEE754單精度浮點(diǎn)數
double://8字節IEEE754雙精度浮點(diǎn)數
char://2字節無(wú)符號Unicode字符
幾乎所有的Java類(lèi)型檢查都是在編譯時(shí)完成的。上面列出的原始數據類(lèi)型的數據在
Java執行時(shí)不需要用硬件標記。操作這些原始數據類(lèi)型數據的字節碼(指令)本身就已經(jīng)

出了操作數的數據類(lèi)型,例如iadd、ladd、fadd和dadd指令都是把兩個(gè)數相加,其操作數
類(lèi)型
別是int、long、float和double。
虛擬機沒(méi)有給boolean(布爾)類(lèi)型設置單獨的指令。boolean型的數據是由integer指令,
包括
integer返回來(lái)處理的。boolean型的數組則是用byte數組來(lái)處理的。
虛擬機使用IEEE754格式的浮點(diǎn)數。不支持IEEE格式的較舊的計算機,在運行Java數值計

算程序時(shí),可能會(huì )非常慢。
虛擬機支持的其它數據類(lèi)型包括:
object//對一個(gè)Javaobject(對象)的4字節引用
returnAddress//4字節,用于jsr/ret/jsr-w/ret-w指令
注:Java數組被當作object處理。
虛擬機的規范對于object內部的結構沒(méi)有任何特殊的要求。在Sun公司的實(shí)現中,對
object的引用是一個(gè)句柄,其中包含一對指針:一個(gè)指針指向該object的方法表,另一個(gè)指

該object的數據。
用Java虛擬機的字節碼表示的程序應該遵守類(lèi)型規定。Java虛擬機的實(shí)現應拒絕執行
違反了類(lèi)型規定的字節碼程序。
Java虛擬機由于字節碼定義的限制似乎只能運行于32位地址空間的機器上。但是可以
創(chuàng )建一個(gè)Java虛擬機,它自動(dòng)地把字節碼轉換成64位的形式。
從Java虛擬機支持的數據類(lèi)型可以看出,Java對數據類(lèi)型的內部格式進(jìn)行了嚴格規定,這

樣使得各種Java虛擬機的實(shí)現對數據的解釋是相同的,從而保證了Java的與平臺無(wú)關(guān)性和

移植性。
--

 
 

二、Java虛擬機體系結構
Java虛擬機由五個(gè)部分組成:一組指令集、一組寄存器、一個(gè)棧、一個(gè)無(wú)用單元收集
堆(Garbage-collected-heap)、一個(gè)方法區域。這五部分是Java虛擬機的邏輯成份,不依
賴(lài)
實(shí)現技術(shù)或組織方式,但它們的功能必須在真實(shí)機器上以某種方式實(shí)現。
1.Java指令集
Java虛擬機支持大約248個(gè)字節碼。每個(gè)字節碼執行一種基本的CPU運算,例如,把一個(gè)
整數加到寄存器,子程序轉移等。Java指令集相當于Java程序的匯編語(yǔ)言。
Java指令集中的指令包含一個(gè)單字節的操作符,用于指定要執行的操作,還有0個(gè)或多個(gè)
操作數,提供操作所需的參數或數據。許多指令沒(méi)有操作數,僅由一個(gè)單字節的操作符構

成。
虛擬機的內層循環(huán)的執行過(guò)程如下:
do{
取一個(gè)操作符字節;
根據操作符的值執行一個(gè)動(dòng)作;
}while(程序未結束)
由于指令系統的簡(jiǎn)單性,使得虛擬機執行的過(guò)程十分簡(jiǎn)單,從而有利于提高執行的效
率。
指令中操作數的數量和大小是由操作符決定的。如果操作數比一個(gè)字節大,那么它存
儲的順序是高位字節優(yōu)先。例如,一個(gè)16位的參數存放時(shí)占用兩個(gè)字節,其值為:
第一個(gè)字節*256+第二個(gè)字節
字節碼指令流一般只是字節對齊的。指令tableswitch和lookup是例外,在這兩條指令內

要求強制的4字節邊界對齊。
2.寄存器
Java虛擬機的寄存器用于保存機器的運行狀態(tài),與微處理器中的某些專(zhuān)用寄存器類(lèi)似
。
Java虛擬機的寄存器有四種:
pc:Java程序計數器。
optop:指向操作數棧頂端的指針。
frame:指向當前執行方法的執行環(huán)境的指針。
vars:指向當前執行方法的局部變量區第一個(gè)變量的指針。(下轉第117版)
Java虛擬機
Java虛擬機是棧式的,它不定義或使用寄存器來(lái)傳遞或接受參數,其目的是為了保證指
令集的簡(jiǎn)潔性和實(shí)現時(shí)的高效性(特別是對于寄存器數目不多的處理器)。
所有寄存器都是32位的。
3.棧
Java虛擬機的棧有三個(gè)區域:局部變量區、運行環(huán)境區、操作數區。
(1)局部變量區 每個(gè)Java方法使用一個(gè)固定大小的局部變量集。它們按照與vars寄存
器的字偏移量來(lái)尋址。局部變量都是32位的。
長(cháng)整數和雙精度浮點(diǎn)數占據了兩個(gè)局部變量的空間,卻按照第一個(gè)局部變量的索引來(lái)
尋址。(例如,一個(gè)具有索引n的局部變量,如果是一個(gè)雙精度浮點(diǎn)數,那么它實(shí)際占據了索

n和n+1所代表的存儲空間。)虛擬機規范并不要求在局部變量中的64位的值是64位對齊的

。
虛擬機提供了把局部變量中的值裝載到操作數棧的指令,也提供了把操作數棧中的值
寫(xiě)入局部變量的指令。
(2)運行環(huán)境區 在運行環(huán)境中包含的信息用于動(dòng)態(tài)鏈接,正常的方法返回以及異常傳
播。
·動(dòng)態(tài)鏈接
運行環(huán)境包括對指向當前類(lèi)和當前方法的解釋器符號表的指針,用于支持方法代碼的
動(dòng)態(tài)鏈接。方法的class文件代碼在引用要調用的方法和要訪(fǎng)問(wèn)的變量時(shí)使用符號。動(dòng)態(tài)

鏈接把符號形式的方法調用翻譯成實(shí)際方法調用,裝載必要的類(lèi)以解釋還沒(méi)有定義的符號

,并把變量訪(fǎng)問(wèn)翻譯成與這些變量運行時(shí)的存儲結構相應的偏移地址。
動(dòng)態(tài)鏈接方法和變量使得方法中使用的其它類(lèi)的變化不會(huì )影響到本程序的代碼。
·正常的方法返回
如果當前方法正常地結束了,在執行了一條具有正確類(lèi)型的返回指令時(shí),調用的方法
會(huì )得到一個(gè)返回值。
執行環(huán)境在正常返回的情況下用于恢復調用者的寄存器,并把調用者的程序計數器增
加一個(gè)恰當的數值,以跳過(guò)已執行過(guò)的方法調用指令,然后在調用者的執行環(huán)境中繼續執

行下去。
·異常和錯誤傳播
異常情況在Java中被稱(chēng)作Error(錯誤)或Exception(異常),是Throwable類(lèi)的子類(lèi),在程序


的原因是:①動(dòng)態(tài)鏈接錯,如無(wú)法找到所需的class文件。②運行時(shí)錯,如對一個(gè)空指針的
引用
·程序使用了throw語(yǔ)句。
當異常發(fā)生時(shí),Java虛擬機采取如下措施:
·檢查與當前方法相聯(lián)系的catch子句表。每個(gè)catch子句包含其有效指令范圍,能夠處
理的異常類(lèi)型,以及處理異常的代碼塊地址。
·與異常相匹配的catch子句應該符合下面的條件:造成異常的指令在其指令范圍之內
,發(fā)生的異常類(lèi)型是其能處理的異常類(lèi)型的子類(lèi)型。如果找到了匹配的catch子句,那么系

轉移到指定的異常處理塊處執行;如果沒(méi)有找到異常處理塊,重復尋找匹配的catch子句的
過(guò)
程,直到當前方法的所有嵌套的catch子句都被檢查過(guò)。
·由于虛擬機從第一個(gè)匹配的catch子句處繼續執行,所以catch子句表中的順序是很重
要的。因為Java代碼是結構化的,因此總可以把某個(gè)方法的所有的異常處理器都按序排列

到一個(gè)表中,對任意可能的程序計數器的值,都可以用線(xiàn)性的順序找到合適的異常處理塊

,以處理在該程序計數器值下發(fā)生的異常情況。
·如果找不到匹配的catch子句,那么當前方法得到一個(gè)"未截獲異常"的結果并返回到
當前方法的調用者,好像異常剛剛在其調用者中發(fā)生一樣。如果在調用者中仍然沒(méi)有找到

相應的異常處理塊,那么這種錯誤傳播將被繼續下去。如果錯誤被傳播到最頂層,那么系

統將調用一個(gè)缺省的異常處理塊。
(3)操作數棧區 機器指令只從操作數棧中取操作數,對它們進(jìn)行操作,并把結果返回
到棧中。選擇棧結構的原因是:在只有少量寄存器或非通用寄存器的機器(如Intel486)上
,也
能夠高效地模擬虛擬機的行為。
操作數棧是32位的。它用于給方法傳遞參數,并從方法接收結果,也用于支持操作的參
數,并保存操作的結果。
例如,iadd指令將兩個(gè)整數相加。相加的兩個(gè)整數應該是操作數棧頂的兩個(gè)字。這兩
個(gè)字是由先前的指令壓進(jìn)堆棧的。這兩個(gè)整數將從堆棧彈出、相加,并把結果壓回到操作

數棧中。
每個(gè)原始數據類(lèi)型都有專(zhuān)門(mén)的指令對它們進(jìn)行必須的操作。每個(gè)操作數在棧中需要
一個(gè)存儲位置,除了long和double型,它們需要兩個(gè)位置。
操作數只能被適用于其類(lèi)型的操作符所操作。例如,壓入兩個(gè)int類(lèi)型的數,如果把它們
當作是一個(gè)long類(lèi)型的數則是非法的。在Sun的虛擬機實(shí)現中,這個(gè)限制由字節碼驗證器

制實(shí)行。但是,有少數操作(操作符dupe和swap),用于對運行時(shí)數據區進(jìn)行操作時(shí)是不考
慮類(lèi)
型的。
4.無(wú)用單元收集堆
Java的堆是一個(gè)運行時(shí)數據區,類(lèi)的實(shí)例(對象)從中分配空間。Java語(yǔ)言具有無(wú)用單元
收集能力:它不給程序員顯式釋放對象的能力。Java不規定具體使用的無(wú)用單元收集算法

,可以根據系統的需求使用各種各樣的算法。
5.方法區
方法區與傳統語(yǔ)言中的編譯后代碼或是Unix進(jìn)程中的正文段類(lèi)似。它保存方法代碼
(編譯后的java代碼)和符號表。在當前的Java實(shí)現中,方法代碼不包括在無(wú)用單元收集堆

,但計劃在將來(lái)的版本中實(shí)現。
每個(gè)類(lèi)文件包含了一個(gè)Java類(lèi)或一個(gè)Java界面的編譯后的代碼??梢哉f(shuō)類(lèi)文件是Java語(yǔ)

言的執行代碼文件。為了保證類(lèi)文件的平臺無(wú)關(guān)性,Java虛擬機規范中對類(lèi)文件的格式也

作了詳細的說(shuō)明。其具體細節請參考Sun公司的Java虛擬機規范。
2006-3-20 16:42:12
yehr
等級:研發(fā)組
文章:144
積分:1175
門(mén)派:無(wú)門(mén)無(wú)派
注冊:2005年12月15日
3
 

三、Java類(lèi)文件(.class文件)
每個(gè)類(lèi)文件包含了一個(gè)Java類(lèi)或一個(gè)Java界面的編譯后的代碼??梢哉f(shuō)類(lèi)文件是Java語(yǔ)
言的執行代碼文件。為了保證類(lèi)文件的平臺無(wú)關(guān)性,Java虛擬機規范中對類(lèi)文件的格式也
作了詳細的說(shuō)明。其具體細節請參考Sun公司的Java虛擬機規范。
四、Java芯片
由于Java語(yǔ)言是解釋型語(yǔ)言,在一般的通用處理器上其運行速度比起編譯型語(yǔ)言要慢
很多。Sun公司為了進(jìn)一步推廣Java的應用,推出了Java芯片。這些芯片可以說(shuō)是Java虛擬
機的硬件實(shí)現。與通用芯片和解釋器構成的虛擬機不同,Java芯片可以直接執行字節碼,也
就是說(shuō),字節碼就是Java芯片的指令集。這種用硬件實(shí)現的虛擬機當然要比軟件模擬的虛擬
機的速度要快得多。
Sun公司計劃推出的Java芯片有三種:picoJava,mi-croJava和ultraJava。
picoJava是一個(gè)很小的Java內核芯片,其硅片面積只有25mm2。Sun公司準備向其它公司轉
讓,以便其它公司可以定制自己的Java芯片,其低端產(chǎn)品的售價(jià)估計不到25美元。
microJava是基于picoJava的微控制器芯片,其芯片面積約為50mm2,用于通信設備和其它嵌
入式控制設備。Sun公司希望在1997年初能制造出microJava芯片的樣片,并最終以25~50
美的價(jià)格出售。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java虛擬機
深入java虛擬機第5章, 棧
操作系統內存與JVM內存
Java虛擬機內部體系結構(摘記,待完善):)
Java中JVM虛擬機詳解
2萬(wàn)字長(cháng)文包教包會(huì ) JVM 內存結構 保姆級學(xué)習筆記
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久