亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java虛擬機的研究與實現

2019-11-18 13:58:14
字體:
來源:轉載
供稿:網友
摘 要 本文在研究kaffe的基礎上,吸收kaffe虛擬機的主要思想,用C語言作為開發語言,采用了及時編譯器作為執行引擎,實現了一種Windows平臺下的java虛擬機。然后對實現過程中的一些要害技術如class文件驗證、及時編譯器、垃圾收集器、線程同步和線程調度等做了分析。

  要害詞 kaffe; C語言; 及時編譯器;Java虛擬機

  引言

  Java虛擬機本質是就是一個程序,當它在命令行上啟動的時候,就開始執行保存在某字節碼文件中的指令。Java語言的可移植性正是建立在Java虛擬機的基礎上。任何平臺只要裝有針對于該平臺的Java虛擬機,字節碼文件(.class)就可以在該平臺上運行。這就是“一次編譯,多次運行”。

  kaffe虛擬機的簡要分析

  kaffe虛擬機采用了模塊化的程序設計思想,它由多個獨立的子系統組成。從功能模塊上來分它主要分為:虛擬機總體驅動模塊,類裝載器模塊,類執行模塊, 數據區治理模塊,內存治理模塊,本地支持模塊等等。kaffe虛擬機簡要的程序流程圖如圖1所示。

  Java虛擬機的研究與實現(圖一)
  圖1 kaffe虛擬機簡要的程序流程圖

  Java虛擬機的實現

  Java 源程序的執行過程為: Java源程序(.java)經過Java編譯器編譯生成字節碼文件(.class),然后由類裝載器將字節碼文件裝載到方法區中,然后進行連接驗證,由Java虛擬機讀取字節碼,轉換為特定平臺的指令,并且在對應的CPU中執行。

  本實現中采用的流程框架如下圖所示:

  Java虛擬機的研究與實現(圖二)
  圖2 本實現的主要框架

  1、類裝載、連接及初始化

  類文件包括:魔數(magic),次、主版本號,常量池,類或接口訪問修飾符,常量池索引(this_class和super_class),接口表,域表,方法表,類或接口的屬性信息。其中最復雜的內容是常量池,它類似于傳統語言編譯過程中用到的符號表。

  從原始的class文件到可以被Java虛擬機執行的內部數據格式,需要經過裝載、連接和初始化這3個階段。

  裝載是將class文件通過類裝載器裝載到在邏輯上被稱為方法區的內存單元中的過程。

  連接又分為三個步驟:驗證,預備和解析。驗證是對字節碼的驗證,可根據具體情況來確定被裝載的類是否符合Java虛擬機規范中規定的class文件格式,并確保它不會破壞Java虛擬機的完整性。包括(1)類裝載過程中的驗證; (2) 檢查class文件內部的連貫性,一旦發現class文件格式存在一處錯誤,則拋出VerifyError異常或ClassFormatError異常。確保每個final類不含有子類,final方法不能被覆蓋,以及常量池中所有的域引用和方法引用有有效的名字和類型描述符號;(3) 對字節碼流使用一個數據流分析器進行驗證。預備步驟的任務是創建域表,并設置域初值。解析步驟是將類中的常量池中的類、接口、字段和方法的符號引用替換成直接引用,以達到更快地訪問數據的目的。

  在初始化階段,Java虛擬機設計者需要將類變量賦予正確的初始值。

  class文件經過上述三個階段的處理,虛擬機就獲得了該類的所有信息并且表示成能夠輕易操作的內部數據格式,從而為方法的運行作好了充分的預備。
  2、及時編譯器

  任何Java虛擬機實現的核心都是它的執行引擎。在由軟件實現的虛擬機中,執行引擎主要有一次性解釋字節碼、及時編譯器、自適應優化編譯器三種方式。本實現采用了及時編譯的方式,它的特點是第一次被執行的機器碼會被編譯成本地機器碼。及時編譯器將引入的字節碼翻譯成本地機器碼,然后直接執行機器碼指令而不是解釋字節碼。機器碼指令保存在內存中,由于在運行過程中編譯的結果不被保存, 所以程序下一次運行時,字節碼將再一次被翻譯成機器碼。

  假如一裝載完字節碼文件中的Java方法后,就對其進行編譯,則有點處理不恰當,因為還不清楚是否需要執行該方法。編譯一個不需要執行的方法,將帶來不必要的空間和時間上的損失。 因此虛擬機設計者需要采用一種優化方案,即只有需要被執行的方法才能被JIT編譯,這個問題可以參照kaffe虛擬機中的trampoline來解決。

  JIT實現步驟:(1)對字節碼進行驗證并且劃分基本塊;(2)產生四元式;(3)根據四元式生成本地機器碼;(4)操作數地址回填。

  Java虛擬機的研究與實現(圖三)
  圖3及時編譯器的流程圖

  在字節碼指令模擬操作的時候,按其語義動作生成指令屬性四元式序列,指令屬性四元式的結構為: (目的操作數, 源操作數1,源操作數2,語義動作),四元式數據結構如下:

typedef strUCt Sequence{
 void (*func)(struct Sequence*); //語義動作
 union{
  jvalue value;
  struct _label_ *labconst; //標號類型操作數
  Method *methconst; //方法地址操作數
  struct slotData **smask;
  struct slotData *slot; //槽操作數
 }u[3];
 uint8 type; //Sequence類型
 uint8 refered; //該四元式的引用
 struct Sequence *next; //下一個四元式
}Sequence;
  其中目的操作數為Sequence.u[0],源操作數1為Sequence.u[1],源操作數2為Sequence.u[2]。 Sequence.func則代表語義動作,它主要用于生成該Sequence語義的本地機器碼。

  指令屬性四元組建立后就進入代碼生成階段,屬性四元組在形式上已經非常接近本地機器指令,只需要遍歷該屬性序列,執行相應的語義動作函數,即可生成機器指令。語義動作函數的功能包括操作數尋址、寄存器分配、建立指令連接以及本地機器碼生成等。

  在及時編譯過程中要經常使用到操作數棧,虛擬機把操作數棧作為它的工作區。大多數指令都要從這里彈出數據,執行運算,然后把結果壓回操作數棧。而操作數棧區,局部變量區和幀數據區被包含在方法幀中。方法幀的數據結構如下:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品视频在线播放| 亚洲xxxx在线| 中文字幕亚洲欧美在线| 国产一区二区三区视频在线观看| 美女啪啪无遮挡免费久久网站| 91精品久久久久久久久久久久久| 午夜精品久久久久久久99黑人| 欧美另类在线播放| 亚洲视频欧洲视频| 久久久成人的性感天堂| 日韩亚洲精品视频| 亚洲成av人乱码色午夜| 97av视频在线| 成人福利在线视频| 国产精品99久久久久久久久| 亚州欧美日韩中文视频| 欧美丝袜一区二区三区| 日韩精品中文字幕在线播放| 国产精品福利片| 亚洲深夜福利网站| 久久久国产精品x99av| 精品国产一区二区在线| 欧美日韩成人网| 久久这里有精品视频| 日韩精品福利网站| 久久在线观看视频| 7m第一福利500精品视频| 欧美激情亚洲激情| 欧美在线亚洲一区| 国产精品日韩在线播放| 久久精品国产欧美激情| 国产精品永久免费| 色综久久综合桃花网| 国产精品久久久久久久一区探花| 国产一区二区丝袜| 久久久av电影| 欧美激情一二区| 一区二区三区视频免费| 国产欧美日韩91| 国产亚洲人成a一在线v站| 97国产在线视频| 欧美日韩综合视频| 欧美精品免费播放| 国产精品综合久久久| 精品日本美女福利在线观看| 国产丝袜一区视频在线观看| 97色在线观看| 国产精品九九久久久久久久| 超碰日本道色综合久久综合| 国产91网红主播在线观看| 欧美精品中文字幕一区| 欧美成人免费一级人片100| 欧美一区二粉嫩精品国产一线天| 黑人巨大精品欧美一区免费视频| 日韩一区二区三区在线播放| 久久久精品日本| 日韩精品极品在线观看| 欧美美女操人视频| www.久久草.com| 久久伊人91精品综合网站| 亚洲一区中文字幕在线观看| 精品国偷自产在线视频99| 国产视频精品va久久久久久| 国产亚洲一区二区在线| 91久久久亚洲精品| 日韩国产欧美精品一区二区三区| 亚洲性av在线| 国产国语videosex另类| 国产成人鲁鲁免费视频a| 日韩电影第一页| 精品国产视频在线| 6080yy精品一区二区三区| 黄色成人av在线| www.亚洲男人天堂| 亚洲美女精品久久| 日韩在线一区二区三区免费视频| 日韩精品一二三四区| 91色p视频在线| 欧美有码在线观看视频| 91久久国产综合久久91精品网站| 亚洲国产欧美一区二区三区同亚洲| 成人信息集中地欧美| 一区二区亚洲精品国产| 日韩av在线影院| 久久国产精品久久久久久久久久| 亚洲电影免费观看高清完整版在线观看| 欧美一级免费看| 欧美另类在线播放| 92福利视频午夜1000合集在线观看| 日韩精品在线播放| 亚洲最大激情中文字幕| 91丨九色丨国产在线| 欧美日韩美女在线| 久久精品一偷一偷国产| 国产精品久久综合av爱欲tv| 国产丝袜一区二区三区| 性色av一区二区三区红粉影视| 97香蕉超级碰碰久久免费的优势| 久久综合伊人77777| 高清视频欧美一级| 色视频www在线播放国产成人| 亚洲日本中文字幕免费在线不卡| 91精品久久久久久综合乱菊| 欧美最顶级的aⅴ艳星| 国产福利精品在线| 国产精品久久久av久久久| 一区二区三区无码高清视频| 5566成人精品视频免费| 国语对白做受69| 久久精品国产精品| 国产成人精品国内自产拍免费看| 欧美大片网站在线观看| 一区二区国产精品视频| 久久久噜噜噜久久| 国产成人拍精品视频午夜网站| 国产视频自拍一区| 亚洲成人网在线观看| 青青草一区二区| 尤物yw午夜国产精品视频明星| 国产亚洲欧洲高清| 亚洲激情在线观看视频免费| 亚洲成人黄色网址| 欧美精品一二区| 美女黄色丝袜一区| 国产精品一区二区久久久| 欧美黄网免费在线观看| 国产精品入口夜色视频大尺度| 日本精品免费一区二区三区| 日韩精品一区二区视频| 青青草原成人在线视频| 亚洲精品久久久久久久久久久| 国产亚洲欧美aaaa| 精品美女永久免费视频| 91精品免费看| 日韩美女视频中文字幕| 国产成人综合精品| 欧美性高潮在线| 精品亚洲精品福利线在观看| 黑人极品videos精品欧美裸| 欧美成人免费在线视频| 国产成人精品电影久久久| 亚洲日本成人女熟在线观看| 日韩精品在线视频美女| 国产精品久久久久久久久影视| 欧美国产高跟鞋裸体秀xxxhd| 亚洲va国产va天堂va久久| 日韩av手机在线| 亚洲精品午夜精品| 国产精品久久久久久av下载红粉| 成人黄色免费片| 日韩美女写真福利在线观看| 精品呦交小u女在线| 亚洲精品suv精品一区二区| 亚洲视频电影图片偷拍一区| 久久久久北条麻妃免费看| 欧美中文在线免费| 色综合久久久888| 成人国产精品av| 亚洲一区二区久久久久久| 亚洲国产女人aaa毛片在线| 久久久国产视频| 亚洲电影成人av99爱色| 青草青草久热精品视频在线网站| 久久精品成人欧美大片古装|