欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java虛擬機有什么用-創(chuàng)新互聯(lián)

這篇文章主要介紹Java虛擬機有什么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

網站建設哪家好,找成都創(chuàng)新互聯(lián)!專注于網頁設計、網站建設、微信開發(fā)、小程序定制開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了班戈免費建站歡迎大家使用!

一、 什么是Java虛擬機
Java虛擬機是一個想象中的機器,在實際的計算機上通過軟件模擬來實現(xiàn)。Java虛擬機有自己想象中的硬件,如處理器、堆棧、寄存器等,還具有相應的指令系統(tǒng)。

1.為什么要使用Java虛擬機?

Java語言的一個非常重要的特點就是與平臺的無關性。而使用Java虛擬機是實現(xiàn)這一特點的關鍵。一般的高級語言如果要在不同的平臺上運行, 至少需要編譯成不同的目標代碼。而引入Java語言虛擬機后,Java語言在不同平臺上運行時不需要重新編譯.

Java虛擬機屏蔽了與具體平臺相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。Java虛擬機在執(zhí)行字節(jié)碼時,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。

2.誰需要了解Java虛擬機


Java虛擬機是Java語言底層實現(xiàn)的基礎,對Java語言感興趣的人都應對Java虛擬機有個大概的了解。這有助于理解Java語言的一些性質,也有助于使用Java語言。
對于要在特定平臺上實現(xiàn)Java虛擬機的軟件人員,Java語言的編譯器作者以及要用硬件芯片實現(xiàn)Java虛擬機的人來說,則必須深刻理解Java虛擬機的規(guī)范。
另外,如果你想擴展 Java語言,或是把其它語言編譯成Java語言的字節(jié)碼,你也需要深入地了解Java虛擬機。
3.Java虛擬機支持的數(shù)據類型

Java虛擬機支持Java語言的基本數(shù)據類型如下:

byte://1字節(jié)有符號整數(shù)的補碼 short://2字節(jié)有符號整數(shù)的補碼 int://4字節(jié)有符號整數(shù)的補碼 long://8字節(jié)有符號整數(shù)的補碼 float://4字節(jié)IEEE754單精度浮點數(shù) double://8字節(jié)IEEE754雙精度浮點數(shù) char://2字節(jié)無符號Unicode字符

幾乎所有的Java類型檢查都是在編譯時完成的。上面列出的原始數(shù)據類型的數(shù)據在 Java執(zhí)行時不需要用硬件標記。操作這些原始數(shù)據類型數(shù)據的字節(jié)碼(指令)本身就已經指出了操作數(shù)的數(shù)據類型,例如iadd、ladd、fadd和 dadd指令都是把兩個數(shù)相加,其操作數(shù)類型特別是int、long、float和double。
虛擬機沒有給boolean(布爾)類型設置單獨的指令。boolean型的數(shù)據是由integer指令, 包括integer返回來處理的。boolean型的數(shù)組則是用byte數(shù)組來處理的。
虛擬機使用IEEE754格式的浮點數(shù)。不支持IEEE格式的較舊的計算機,在運行Java數(shù)值計算程序時,可能會非常慢。
虛擬機支持的其它數(shù)據類型包括:

object//對一個Javaobject(對象)的4字節(jié)引用 returnAddress//4字節(jié),用于jsr/ret/jsr-w/ret-w指令

注:Java數(shù)組被當作object處理。
虛擬機的規(guī)范對于object內部的結構沒有任何特殊的要求。在Sun公司的實現(xiàn)中,對 object的引用是一個句柄,其中包含一對指針:一個指針指向該object的方法表,另一個指向 該object的數(shù)據。
用Java虛擬機的字節(jié)碼表示的程序應該遵守類型規(guī)定。Java虛擬機的實現(xiàn)應拒絕執(zhí)行違反了類型規(guī)定的字節(jié)碼程序。
Java虛擬機由于字節(jié)碼定義的限制似乎只能運行于32位地址空間的機器上。但是可以創(chuàng)建一個Java虛擬機,它自動地把字節(jié)碼轉換成64位的形式。
從Java虛擬機支持的數(shù)據類型可以看出,Java對數(shù)據類型的內部格式進行了嚴格規(guī)定,這樣使得各種Java虛擬機的實現(xiàn)對數(shù)據的解釋是相同的,從而保證了Java的與平臺無關性和可移植性。
二、 Java虛擬機體系結構

Java虛擬機由五個部分組成:一組指令集、一組寄存器、一個棧、一個無用單元收集堆(Garbage-collected-heap)、一個方法區(qū)域。這五部分是Java虛擬機的邏輯成份,不依賴 任何實現(xiàn)技術或組織方式,但它們的功能必須在真實機器上以某種方式實現(xiàn)。

Java指令集
Java虛擬機支持大約248個字節(jié)碼。每個字節(jié)碼執(zhí)行一種基本的CPU運算,例如,把一個整數(shù)加到寄存器,子程序轉移等。Java指令集相當于Java程序的匯編語言。
Java指令集中的指令包含一個單字節(jié)的操作符,用于指定要執(zhí)行的操作,還有0個或多個操作數(shù),提供操作所需的參數(shù)或數(shù)據。許多指令沒有操作數(shù),僅由一個單字節(jié)的操作符構成。虛擬機的內層循環(huán)的執(zhí)行過程如下:
do{ 取一個操作符字節(jié); 根據操作符的值執(zhí)行一個動作; }while(程序未結束)

由于指令系統(tǒng)的簡單性,使得虛擬機執(zhí)行的過程十分簡單,從而有利于提高執(zhí)行的效率。
指令中操作數(shù)的數(shù)量和大小是由操作符決定的。如果操作數(shù)比一個字節(jié)大,那么它存儲的順序是高位字節(jié)優(yōu)先。例如,一個16位的參數(shù)存放時占用兩個字節(jié),其值為: 第一個字節(jié)*256+第二個字節(jié)
字節(jié)碼指令流一般只是字節(jié)對齊的。指令tableswitch和lookup是例外,在這兩條指令內部 要求強制的4字節(jié)邊界對齊。

寄存器
Java虛擬機的寄存器用于保存機器的運行狀態(tài),與微處理器中的某些專用寄存器類似。 Java虛擬機的寄存器有四種:
pc:Java程序計數(shù)器。 optop:指向操作數(shù)棧頂端的指針。 frame:指向當前執(zhí)行方法的執(zhí)行環(huán)境的指針。 vars:指向當前執(zhí)行方法的局部變量區(qū)第一個變量的指針。


Java虛擬機
Java虛擬機是棧式的,它不定義或使用寄存器來傳遞或接受參數(shù),其目的是為了保證指令集的簡潔性和實現(xiàn)時的高效性(特別是對于寄存器數(shù)目不多的處理器)。所有寄存器都是32位的。


Java虛擬機的棧有三個區(qū)域:局部變量區(qū)、運行環(huán)境區(qū)、操作數(shù)區(qū)。
局部變量區(qū) 
每個Java方法使用一個固定大小的局部變量集。它們按照與vars寄存器的字偏移量來尋址。局部變量都是32位的。長整數(shù)和雙精度浮點數(shù)占據了兩個局部變量的空間,卻按照第一個局部變量的索引來尋址。(例如,一個具有索引n的局部變量,如果是一個雙精度浮點數(shù),那么它實際占據了索引 n和n+1所代表的存儲空間。)虛擬機規(guī)范并不要求在局部變量中的64位的值是64位對齊的虛擬機提供了把局部變量中的值裝載到操作數(shù)棧的指令,也提供了把操作數(shù)棧中的值寫入局部變量的指令。
運行環(huán)境區(qū)
 在運行環(huán)境中包含的信息用于動態(tài)鏈接,正常的方法返回以及異常傳播。
動態(tài)鏈接
運行環(huán)境包括對指向當前類和當前方法的解釋器符號表的指針,用于支持方法代碼的動態(tài)鏈接。方法的class文件代碼在引用要調用的方法和要訪問的變量時使用符號。動態(tài)鏈接把符號形式的方法調用翻譯成實際方法調用,裝載必要的類以解釋還沒有定義的符號, 并把變量訪問翻譯成與這些變量運行時的存儲結構相應的偏移地址。動態(tài)鏈接方法和變量使得方法中使用的其它類的變化不會影響到本程序的代碼。
正常的方法返回
如果當前方法正常地結束了,在執(zhí)行了一條具有正確類型的返回指令時,調用的方法會得到一個返回值。
執(zhí)行環(huán)境在正常返回的情況下用于恢復調用者的寄存器,并把調用者的程序計數(shù)器增加一個恰當?shù)臄?shù)值,以跳過已執(zhí)行過的方法調用指令,然后在調用者的執(zhí)行環(huán)境中繼續(xù)執(zhí)行下去。

異常和錯誤傳播
異常情況在Java中被稱作Error(錯誤)或Exception(異常),是Throwable類的子類,在程序中出錯的原因是:①動態(tài)鏈接錯,如無法找到所需的class文件。②運行時錯,如對一個空指針的引用

程序使用了throw語句。
當異常發(fā)生時,Java虛擬機采取如下措施:
檢查與當前方法相聯(lián)系的catch子句表。每個catch子句包含其有效指令范圍,能夠處理的異常類型,以及處理異常的代碼塊地址。
與異常相匹配的catch子句應該符合下面的條件:造成異常的指令在其指令范圍之內 ,發(fā)生的異常類型是其能處理的異常類型的子類型。如果找到了匹配的catch子句,那么系統(tǒng)轉移到指定的異常處理塊處執(zhí)行;如果沒有找到異常處理塊,重復尋找匹配的catch子句的過程,直到當前方法的所有嵌套的catch子句都被檢查過。
由于虛擬機從第一個匹配的catch子句處繼續(xù)執(zhí)行,所以catch子句表中的順序是很重要的。因為Java代碼是結構化的,因此總可以把某個方法的所有的異常處理器都按序排列到一個表中,對任意可能的程序計數(shù)器的值,都可以用線性的順序找到合適的異常處理塊,以處理在該程序計數(shù)器值下發(fā)生的異常情況。
如果找不到匹配的catch子句,那么當前方法得到一個"未截獲異常"的結果并返回到當前方法的調用者,好像異常剛剛在其調用者中發(fā)生一樣。如果在調用者中仍然沒有找到相應的異常處理,那么系 統(tǒng)將調用一個缺省的異常處理塊。
操作數(shù)棧區(qū) 
機器指令只從操作數(shù)棧中取操作數(shù),對它們進行操作,并把結果返回到棧中。選擇棧結構的原因是:在只有少量寄存器或非通用寄存器的機器(如Intel486)上,也能夠高效地模擬虛擬機的行為。
操作數(shù)棧是32位的。它用于給方法傳遞參數(shù),并從方法接收結果,也用于支持操作的參數(shù),并保存操作的結果。
例如,iadd指令將兩個整數(shù)相加。相加的兩個整數(shù)應該是操作數(shù)棧頂?shù)膬蓚€字。這兩個字是由先前的指令壓進堆棧的。這兩個整數(shù)將從堆棧彈出、相加,并把結果壓回到操作數(shù)棧中。每個原始數(shù)據類型都有專門的指令對它們進行必須的操作。每個操作數(shù)在棧中需要一個存儲位置,除了long和double 型,它們需要兩個位置。
操作數(shù)只能被適用于其類型的操作符所操作。例如,壓入兩個int類型的數(shù),如果把它們當作是一個long類型的數(shù)則是非法的。在Sun的虛擬機實現(xiàn)中,這個限制由字節(jié)碼驗證器強制實行。但是,有少數(shù)操作(操作符dupe和swap),用于對運行時數(shù)據區(qū)進行操作時是不考慮類型的。
無用單元收集堆
Java的堆是一個運行時數(shù)據區(qū),類的實例(對象)從中分配空間。Java語言具有無用單元收集能力:它不給程序員顯式釋放對象的能力。Java不規(guī)定具體使用的無用單元收集算法,可以根據系統(tǒng)的需求使用各種各樣的算法。

方法區(qū)
方法區(qū)與傳統(tǒng)語言中的編譯后代碼或是Unix進程中的正文段類似。它保存方法代碼 (編譯后的java代碼)和符號表。在當前的Java實現(xiàn)中,方法代碼不包括在無用單元收集堆中,但計劃在將來的版本中實現(xiàn)。每個類文件包含了一個 Java類或一個Java界面的編譯后的代碼??梢哉f類文件是 Java語言的執(zhí)行代碼文件。為了保證類文件的平臺無關性,Java虛擬機規(guī)范中對類文件的格式也作了詳細的說明。其具體細節(jié)請參考Sun公司的Java 虛擬機規(guī)范
三、 Java類文件(.class文件)

每個類文件包含了一個Java類或一個Java界面的編譯后的代碼。可以說類文件是Java語言的執(zhí)行代碼文件。為了保證類文件的平臺無關性,Java虛擬機規(guī)范中對類文件的格式也作了詳細的說明。其具體細節(jié)請參考Sun公司的Java虛擬機規(guī)范。

四、 Java芯片

由于Java語言是解釋型語言,在一般的通用處理器上其運行速度比起編譯型語言要慢很多。Sun公司為了進一步推廣Java的應用,推出了 Java芯片。這些芯片可以說是Java虛擬機的硬件實現(xiàn)。與通用芯片和解釋器構成的虛擬機不同,Java芯片可以直接執(zhí)行字節(jié)碼,也就是說,字節(jié)碼就是 Java芯片的指令集。這種用硬件實現(xiàn)的虛擬機當然要比軟件模擬的虛擬機的速度要快得多。
Sun公司計劃推出的Java芯片有三種:picoJava,mi-croJava和ultraJava。

picoJava是一個很小的Java內核芯片,其硅片面積只有25mm2。Sun公司準備向其它公司轉讓,以便其它公司可以定制自己的Java芯片,其低端產品的售價估計不到25美元。
microJava是基于picoJava的微控制器芯片,其芯片面積約為50mm2,用于通信設備和其它嵌入式控制設備。Sun公司希望Java芯片可以成為推動Java發(fā)展的主要技術之一。

以上是“Java虛擬機有什么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)-成都網站建設公司行業(yè)資訊頻道!

網站題目:Java虛擬機有什么用-創(chuàng)新互聯(lián)
鏈接地址:http://chinadenli.net/article44/depdee.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、關鍵詞優(yōu)化、品牌網站建設商城網站定制網站、企業(yè)網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網站建設
亚洲一区二区福利在线| 尹人大香蕉一级片免费看| 四季av一区二区播放| 亚洲欧美视频欧美视频| 香港国产三级久久精品三级| 国产精品激情对白一区二区| 欧美日韩综合免费视频| 精品视频一区二区不卡| 午夜午夜精品一区二区| 很黄很污在线免费观看| 福利视频一区二区三区| 欧美亚洲综合另类色妞| 高清一区二区三区四区五区| 欧美一级不卡视频在线观看| 国产乱淫av一区二区三区| 欧美成人黄色一区二区三区| 东京热加勒比一区二区三区| 97人妻人人揉人人躁人人| 色一情一乱一区二区三区码| 国产精品日韩欧美一区二区| 黑人巨大精品欧美一区二区区 | 欧美尤物在线视频91| 午夜精品一区二区三区国产| 日韩精品视频免费观看| 情一色一区二区三区四| 中文字幕五月婷婷免费| 欧美日韩校园春色激情偷拍| 五月激情婷婷丁香六月网| 六月丁香六月综合缴情| 在线九月婷婷丁香伊人| 久久热这里只有精品视频| 亚洲天堂久久精品成人| 小草少妇视频免费看视频| 亚洲国产精品一区二区| 丁香七月啪啪激情综合| 午夜传媒视频免费在线观看| 亚洲永久一区二区三区在线| 91人妻久久精品一区二区三区| 欧美日韩国产另类一区二区| 91播色在线免费播放| 亚洲国产精品久久网午夜|