亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? jvm.txt

?? 張孝祥老師的VC講義
?? TXT
字號:
張孝祥 http://www.it315.org

  JVM(JAVA虛擬機(jī)介紹)

  Java虛擬機(jī)(JVM)是可運(yùn)行Java代碼的假想計算機(jī)。只要根據(jù)JVM規(guī)格描述將解釋器移植到特定的計算機(jī)上,就能保證經(jīng)過編譯的任何Java代碼能夠在該系統(tǒng)上運(yùn)行。本文首先簡要介紹從Java文件的編譯到最終執(zhí)行的過程,隨后對JVM規(guī)格描述作一說明。

  一.Java源文件的編譯、下載、解釋和執(zhí)行
  Java應(yīng)用程序的開發(fā)周期包括編譯、下載、解釋和執(zhí)行幾個部分。Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼—字節(jié)碼。這一編譯過程同C/C++的編譯有些不同。當(dāng)C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬件平臺運(yùn)行而產(chǎn)生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉(zhuǎn)換為特定的內(nèi)存偏移量,以保證程序運(yùn)行。Java編譯器卻不將對變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過程中的內(nèi)存布局,而是將這些符號引用信息保留在字節(jié)碼中,由解釋器在運(yùn)行過程中創(chuàng)立內(nèi)存布局,然后再通過查表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全性。 
運(yùn)行JVM字節(jié)碼的工作是由解釋器來完成的。解釋執(zhí)行過程分三部進(jìn)行:代碼的裝入、代碼的校驗和代碼的執(zhí)行。裝入代碼的工作由"類裝載器"(class loader)完成。類裝載器負(fù)責(zé)裝入運(yùn)行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被其調(diào)用的類。當(dāng)類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本臺計算機(jī)上的所有類都在同一地址空間內(nèi),而所有從外部引進(jìn)的類,都有一個自己獨(dú)立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運(yùn)行效率,同時又保證它們與從外部引進(jìn)的類不會相互影響。當(dāng)裝入了運(yùn)行程序需要的所有類后,解釋器便可確定整個可執(zhí)行程序的內(nèi)存布局。解釋器為符號引用同特定的地址空間建立對應(yīng)關(guān)系及查詢表。通過在這一階段確定代碼的內(nèi)存布局,Java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。 
隨后,被裝入的代碼由字節(jié)碼校驗器進(jìn)行檢查。校驗器可發(fā)現(xiàn)操作數(shù)棧溢出,非法數(shù)據(jù)類型轉(zhuǎn)化等多種錯誤。通過校驗后,代碼便開始執(zhí)行了。 
  Java字節(jié)碼的執(zhí)行有兩種方式: 
  1.即時編譯方式:解釋器先將字節(jié)碼編譯成機(jī)器碼,然后再執(zhí)行該機(jī)器碼。 
  2.解釋執(zhí)行方式:解釋器通過每次解釋并執(zhí)行一小段代碼來完成Java字節(jié)碼程 序的所有操作。 
  通常采用的是第二種方法。由于JVM規(guī)格描述具有足夠的靈活性,這使得將字節(jié)碼翻譯為機(jī)器代碼的工作具有較高的效率。對于那些對運(yùn)行速度要求較高的應(yīng)用程序,解釋器可將Java字節(jié)碼即時編譯為機(jī)器碼,從而很好地保證了Java代碼的可移植性和高性能。

  二.JVM規(guī)格描述 
  JVM的設(shè)計目標(biāo)是提供一個基于抽象規(guī)格描述的計算機(jī)模型,為解釋程序開發(fā)人員提很好的靈活性,同時也確保Java代碼可在符合該規(guī)范的任何系統(tǒng)上運(yùn)行。JVM對其實現(xiàn)的某些方面給出了具體的定義,特別是對Java可執(zhí)行代碼,即字節(jié)碼(Bytecode)的格式給出了明確的規(guī)格。這一規(guī)格包括操作碼和操作數(shù)的語法和數(shù)值、標(biāo)識符的數(shù)值表示方式、以及Java類文件中的Java對象、常量緩沖池在JVM的存儲映象。這些定義為JVM解釋器開發(fā)人員提供了所需的信息和開發(fā)環(huán)境。Java的設(shè)計者希望給開發(fā)人員以隨心所欲使用Java的自由。 
  JVM定義了控制Java代碼解釋執(zhí)行和具體實現(xiàn)的五種規(guī)格,它們是: 
  JVM指令系統(tǒng) 
  JVM寄存器 
  JVM棧結(jié)構(gòu) 
  JVM碎片回收堆 
  JVM存儲區(qū) 
  2.1JVM指令系統(tǒng) 
JVM指令系統(tǒng)同其他計算機(jī)的指令系統(tǒng)極其相似。Java指令也是由 操作碼和操作數(shù)兩部分組成。操作碼為8位二進(jìn)制數(shù),操作數(shù)進(jìn)緊隨在操作碼的后面,其長度根據(jù)需要而不同。操作碼用于指定一條指令操作的性質(zhì)(在這里我們采用匯編符號的形式進(jìn)行說明),如iload表示從存儲器中裝入一個整數(shù),anewarray表示為一個新數(shù)組分配空間,iand表示兩個整數(shù)的"與",ret用于流程控制,表示從對某一方法的調(diào)用中返回。當(dāng)長度大于8位時,操作數(shù)被分為兩個以上字節(jié)存放。JVM采用了"big endian"的編碼方式來處理這種情況,即高位bits存放在低字節(jié)中。這同 Motorola及其他的RISC CPU采用的編碼方式是一致的,而與Intel采用的"little endian "的編碼方式即低位bits存放在低位字節(jié)的方法不同。 
  Java指令系統(tǒng)是以Java語言的實現(xiàn)為目的設(shè)計的,其中包含了用于調(diào)用方法和監(jiān)視多先程系統(tǒng)的指令。Java的8位操作碼的長度使得JVM最多有256種指令,目前已使用了160多種操作碼。 
  2.2JVM指令系統(tǒng) 
所有的CPU均包含用于保存系統(tǒng)狀態(tài)和處理器所需信息的寄存器組。如果虛擬機(jī)定義較多的寄存器,便可以從中得到更多的信息而不必對棧或內(nèi)存進(jìn)行訪問,這有利于提高運(yùn)行速度。然而,如果虛擬機(jī)中的寄存器比實際CPU的寄存器多,在實現(xiàn)虛擬機(jī)時就會占用處理器大量的時間來用常規(guī)存儲器模擬寄存器,這反而會降低虛擬機(jī)的效率。針對這種情況,JVM只設(shè)置了4個最為常用的寄存器。它們是: 
  pc程序計數(shù)器 
  optop操作數(shù)棧頂指針 
  frame當(dāng)前執(zhí)行環(huán)境指針 
  vars指向當(dāng)前執(zhí)行環(huán)境中第一個局部變量的指針 
所有寄存器均為32位。pc用于記錄程序的執(zhí)行。optop,frame和vars用于記錄指向Java棧區(qū)的指針。 
  2.3JVM棧結(jié)構(gòu) 
  作為基于棧結(jié)構(gòu)的計算機(jī),Java棧是JVM存儲信息的主要方法。當(dāng)JVM得到一個Java字節(jié)碼應(yīng)用程序后,便為該代碼中一個類的每一個方法創(chuàng)建一個棧框架,以保存該方法的狀態(tài)信息。每個棧框架包括以下三類信息: 
  局部變量 
  執(zhí)行環(huán)境 
  操作數(shù)棧
局部變量用于存儲一個類的方法中所用到的局部變量。vars寄存器指向該變量表中的第一個局部變量。 
  執(zhí)行環(huán)境用于保存解釋器對Java字節(jié)碼進(jìn)行解釋過程中所需的信息。它們是:上次調(diào)用的方法、局部變量指針和操作數(shù)棧的棧頂和棧底指針。執(zhí)行環(huán)境是一個執(zhí)行一個方法的控制中心。例如:如果解釋器要執(zhí)行iadd(整數(shù)加法),首先要從frame寄存器中找到當(dāng)前執(zhí)行環(huán)境,而后便從執(zhí)行環(huán)境中找到操作數(shù)棧,從棧頂彈出兩個整數(shù)進(jìn)行加法運(yùn)算,最后將結(jié)果壓入棧頂。 
操作數(shù)棧用于存儲運(yùn)算所需操作數(shù)及運(yùn)算的結(jié)果。 
  2.4JVM碎片回收堆 
  Java類的實例所需的存儲空間是在堆上分配的。解釋器具體承擔(dān)為類實例分配空間的工作。解釋器在為一個實例分配完存儲空間后,便開始記錄對該實例所占用的內(nèi)存區(qū)域的使用。一旦對象使用完畢,便將其回收到堆中。 
在Java語言中,除了new語句外沒有其他方法為一對象申請和釋放內(nèi)存。對內(nèi)存進(jìn)行釋放和回收的工作是由Java運(yùn)行系統(tǒng)承擔(dān)的。這允許Java運(yùn)行系統(tǒng)的設(shè)計者自己決定碎片回收的方法。在SUN公司開發(fā)的Java解釋器和Hot Java環(huán)境中,碎片回收用后臺線程的方式來執(zhí)行。這不但為運(yùn)行系統(tǒng)提供了良好的性能,而且使程序設(shè)計人員擺脫了自己控制內(nèi)存使用的風(fēng)險。 
  2.5JVM存儲區(qū) 
JVM有兩類存儲區(qū):常量緩沖池和方法區(qū)。常量緩沖池用于存儲類名稱、方法和字段名稱以及串常量。方法區(qū)則用于存儲Java方法的字節(jié)碼。對于這兩種存儲區(qū)域具體實現(xiàn)方式在JVM規(guī)格中沒有明確規(guī)定。這使得Java應(yīng)用程序的存儲布局必須在運(yùn)行過程中確定,依賴于具體平臺的實現(xiàn)方式。 
  JVM是為Java字節(jié)碼定義的一種獨(dú)立于具體平臺的規(guī)格描述,是Java平臺獨(dú)立性的基礎(chǔ)。目前的JVM還存在一些限制和不足,有待于進(jìn)一步的完善,但無論如何,JVM的思想是成功的。

  對比分析:如果把Java原程序想象成我們的C++原程序,Java原程序編譯后生成的字節(jié)碼就相當(dāng)于C++原程序編譯后的80x86的機(jī)器碼(二進(jìn)制程序文件),JVM虛擬機(jī)相當(dāng)于80x86計算機(jī)系統(tǒng),Java解釋器相當(dāng)于80x86CPU。在80x86CPU上運(yùn)行的是機(jī)器碼,在Java解釋器上運(yùn)行的是Java字節(jié)碼。
  Java解釋器相當(dāng)于運(yùn)行Java字節(jié)碼的“CPU”,但該“CPU”不是通過硬件實現(xiàn)的,而是用軟件實現(xiàn)的。Java解釋器實際上就是特定的平臺下的一個應(yīng)用程序。只要實現(xiàn)了特定平臺下的解釋器程序,Java字節(jié)碼就能通過解釋器程序在該平臺下運(yùn)行,這是Java跨平臺的根本。當(dāng)前,并不是在所有的平臺下都有相應(yīng)Java解釋器程序,這也是Java并不能在所有的平臺下都能運(yùn)行的原因,它只能在已實現(xiàn)了Java解釋器程序的平臺下運(yùn)行。

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲永久免费视频| 亚洲日韩欧美一区二区在线| 99国产精品一区| 欧洲亚洲国产日韩| 国产女人aaa级久久久级| 首页国产欧美久久| 91色婷婷久久久久合中文| 精品裸体舞一区二区三区| 亚洲自拍偷拍九九九| 风流少妇一区二区| 欧美r级在线观看| 亚洲午夜激情网站| 99re这里都是精品| 久久久www成人免费毛片麻豆| 天堂一区二区在线| 欧美在线观看视频在线| 欧美国产一区视频在线观看| 久久精品国产网站| 欧美丝袜丝交足nylons| 最新高清无码专区| 国产成人aaa| 亚洲精品一区在线观看| 视频一区视频二区中文| 色狠狠一区二区三区香蕉| 日本一区二区三区高清不卡| 精品一二线国产| 欧美男人的天堂一二区| 一区二区三区四区精品在线视频| 国产电影一区二区三区| 日韩精品中文字幕在线一区| 午夜成人在线视频| 欧美三区免费完整视频在线观看| 综合自拍亚洲综合图不卡区| 成人高清免费在线播放| 国产亚洲精品中文字幕| 狠狠久久亚洲欧美| 亚洲精品一区二区三区香蕉| 日韩**一区毛片| 欧美日本一区二区| 亚洲成人动漫精品| 欧美在线影院一区二区| 亚洲黄色免费电影| 在线观看91视频| 亚洲免费观看高清完整| 色婷婷一区二区三区四区| 亚洲女与黑人做爰| 在线亚洲一区观看| 亚洲黄色免费网站| 欧美日韩一区二区在线观看| 亚洲成人av一区二区| 欧美性一二三区| 无码av免费一区二区三区试看| 欧美剧情片在线观看| 日本最新不卡在线| 精品欧美乱码久久久久久1区2区| 久久99精品久久久| 久久精品视频在线免费观看| 国产成人在线免费| 国产精品久久久久久久久图文区 | 精品国产sm最大网站免费看| 久久99热这里只有精品| 久久久亚洲精品石原莉奈| 成人午夜免费视频| 亚洲色图.com| 欧美日韩视频一区二区| 美女国产一区二区| 日本一区二区在线不卡| 91啪在线观看| 亚洲国产精品久久艾草纯爱| 欧美一级片免费看| 国内成人精品2018免费看| 中文字幕+乱码+中文字幕一区| www.66久久| 亚洲国产色一区| 精品国产一区二区三区av性色 | 亚洲综合区在线| 在线播放国产精品二区一二区四区| 日本系列欧美系列| 久久久亚洲国产美女国产盗摄 | 青青草视频一区| 久久久影视传媒| 色美美综合视频| 日本 国产 欧美色综合| 国产欧美一区二区三区网站| 91久久精品一区二区三| 美国av一区二区| 国产精品久久久久7777按摩| 欧美日韩免费不卡视频一区二区三区 | 欧美三级视频在线播放| 美女视频黄a大片欧美| 国产精品久久国产精麻豆99网站| 欧美日韩一级视频| 国产激情91久久精品导航| 亚洲一区二区三区自拍| 2024国产精品视频| 欧洲一区在线电影| 国产精品原创巨作av| 亚洲图片欧美色图| 国产三级欧美三级日产三级99| 色综合视频一区二区三区高清| 美女一区二区久久| 亚洲精品国产第一综合99久久| 欧美岛国在线观看| 91福利视频网站| 国产精品一区二区在线观看不卡 | 精品国产免费人成电影在线观看四季| 成人久久视频在线观看| 热久久免费视频| 成人免费小视频| 26uuu国产电影一区二区| 欧美在线免费观看视频| 成人小视频在线观看| 日韩黄色小视频| 亚洲图片另类小说| 久久精子c满五个校花| 欧美人伦禁忌dvd放荡欲情| a级精品国产片在线观看| 美腿丝袜亚洲色图| 亚洲综合色在线| 国产精品色婷婷| 欧美成人猛片aaaaaaa| 欧美日韩综合色| 99精品视频在线观看| 国产美女精品人人做人人爽| 丝袜诱惑亚洲看片| 一区二区三区在线视频播放| 国产嫩草影院久久久久| 精品女同一区二区| 91精品国产手机| 欧美揉bbbbb揉bbbbb| 色美美综合视频| jlzzjlzz亚洲日本少妇| 国产一区二区三区黄视频 | 欧美肥妇毛茸茸| 91精品福利视频| av在线这里只有精品| 国产一二精品视频| 麻豆91免费观看| 日韩av不卡在线观看| 亚洲国产三级在线| 亚洲精品高清在线| 国产精品国产三级国产普通话三级 | 欧美亚日韩国产aⅴ精品中极品| eeuss鲁片一区二区三区在线看| 国产精品77777竹菊影视小说| 精品伊人久久久久7777人| 丝瓜av网站精品一区二区| 亚洲香肠在线观看| 亚洲精品日韩专区silk | 日韩精品一区二区三区蜜臀| 欧美高清激情brazzers| 在线观看视频91| 日本丶国产丶欧美色综合| 一本一道波多野结衣一区二区| 99免费精品在线| eeuss鲁片一区二区三区| 大胆亚洲人体视频| zzijzzij亚洲日本少妇熟睡| 成人av电影免费在线播放| 不卡一区中文字幕| 91网址在线看| 在线看一区二区| 欧美日韩精品欧美日韩精品一| 欧美三区免费完整视频在线观看| 欧美少妇一区二区| 欧美日韩mp4| 91精品欧美一区二区三区综合在| 7777精品伊人久久久大香线蕉超级流畅| 欧美日韩高清一区二区不卡| 91精品国产综合久久久蜜臀粉嫩| 欧美一区二区精品在线| 欧美videofree性高清杂交| 日韩精品一区二区在线| 久久综合狠狠综合久久激情| 久久久精品日韩欧美| 国产精品三级电影| 亚洲三级在线看| 亚洲成人黄色影院| 青青草精品视频| 国产高清成人在线| 99re热这里只有精品免费视频| 色一情一乱一乱一91av| 欧美日韩视频在线观看一区二区三区| 制服丝袜中文字幕一区| 日韩欧美高清一区| 欧美国产精品一区| 一区二区三区在线观看国产| 午夜日韩在线观看| 久久超碰97人人做人人爱| 国产成人欧美日韩在线电影| 91女人视频在线观看| 欧美日韩成人综合| xvideos.蜜桃一区二区| 亚洲人成影院在线观看| 日韩黄色片在线观看| 国产高清精品久久久久| 色狠狠色狠狠综合| 欧美成人三级在线| 中文字幕一区二区在线播放| 亚洲午夜久久久久久久久电影网|