賀蘊彬
摘 要:文章闡述了Java虛擬機的概括,分析了Java虛擬機的特點,對Java虛擬機的體系結構進行了描述。針對Java虛擬機的自適應動態優化,文章做了深入分析。最后對Java虛擬機的自適應動態優化框架以圖示的方式進行了研究。
關鍵詞:Java虛擬機;自適應;動態優化
1 Java虛擬機概述
Java虛擬機(Java virtual machine)作為一種具有抽象意義的計算機系統,可以在具體的計算機上對多種計算機功能進行仿真模擬,以此來實現特定的需求。Java Virtual Machine具有中央處理器、寄存器以及堆棧等一套完備的硬件體系,也具備成熟的指令系統。為了實現Java程序可以在多種平臺上不需要修改就可以運行,可以依托Java virtual machine,通過Java程序生成相應代碼來運行即可。
2 Java虛擬機的特點
通常,Java語言與其所運行的平臺無關,這是Java語言的一個重要特點。其關鍵在于應用了ava virtual machine。使用其他高級語言編寫的程序,如果需要運行在不同的平臺,則要編譯為多種不同的目標程序。而借助ava virtual machine,java語言不需要重新編輯即可在不同平臺上運行。Java virtual machine執行目標代碼時,把目標代碼解讀為特定平臺上的機器指令來遵循。
3 Java虛擬機的體系結構
Java virtual machine可以通過不同廠商來實現,則因廠商的不同而造成Java virtual machine實現上的不同,但這不影響Java virtual machine的跨平臺特性,這是因為Java virtual machine獨特的體系結構。
Java virtual machine內部的抽象的體系結構由存儲器、指令、數據類型和子系統組成。這些都提供了一種方式,可以對外部行為進行定義。Java virtual machine的機制有兩種,類裝載系統用于裝載合適的類,運行引擎用來執行已經裝載的類的指令。每個Java virtual machine由堆、方法區、程序計數器、Java棧以及被你的方法棧,同時,搭配了運行引擎和類裝載共同構成了Java virtual machine的體系結構(如下圖所示)。
4 Java虛擬機的自適應動態優化
Java virtual machine類似于抽象意義上的堆棧計算機,其作用是裝載類文件,然后運行其目標代碼,目標代碼的操作次數都源于堆棧。現在,常見的處理器都采用寄存器結構,所以,Java virtual machine要對這些針對堆棧的命令通過即時編輯機或解釋機進行解釋,解讀為寄存器可以執行的指令。在解釋和執行的次序上是解釋一次執行一次,并不包括解釋后的機器指令。如果需要多次執行目標程序,就要多次解釋執行。但即時編譯機會把首次執行的程序翻譯為本地程序,并在內存中緩存代碼,后續可以再次調用而實現該方法的復用。
Java virtual machine可以動態自適應去裝載,這種動態自適應裝載類的模式促進了Java的靈活的網絡性質。Java virtual machine既能裝載本地的類程序,也可以對網絡上的類進行裝載。Java virtual machine為了安全地管理這些不同裝載器裝載的類,對其擬定了不同的名字,以此,Java virtual machine能夠依照名字把代碼列入不同的類型,然后對不同類型的代碼執行不同的操作。
作為Java virtual machine的重要優化方法的內聯,難以實現面向對象的動態編程語言。所以,基于Java的程序可以在運行的同時改變不同的調用模式,也可以動態裝載不同的Java程序以應對不同的需求。
面向全局進行分析的內聯,因為動態的裝載而增加了復雜性。程序的全局關系被其改變,則新加載的類程序就需要被內聯。因此,Java virtual machine要動態的優化之前優化過的程序,或者在執行熱點代碼的同時,進行這種動態優化。否則,一般的內聯優化就不能系統地進行執行。
5 Java虛擬機的自適應的動態優化框架
Trace緩沖區、插樁器和動態優化策略挑選機共同構成了Java虛擬機的自適應動態優化框架。在即時編譯機中,插樁器執行對訪問對象的指令開展插樁,來獲取Java對訪問對象的相關信息。程序運行中的對象信息存放在Trace緩沖區里。動態優化策略挑選機參展緩沖區里的信息動態選擇對Java程序的自適應優化策略。
上圖描述了Trace緩沖區的構成。這是48KB的緩沖區,其中的每一個單元是12字節。緩沖區的寫入是自上而下。緩沖區的頂部和底部分別用不同的名稱代表(如圖所示)。緩沖區再向下部分不可寫。應用程序把數據寫入緩沖區,溢出后,就產生錯誤代碼。即時編輯機編譯Java目標代碼,把與平臺無關的代碼翻譯為與平臺相關的機器指令。編譯器會在編譯時識別該模式中的指令,并對應開始插樁,同時手機訪問對象的情況。編輯后,Java程序在運行的過程中把訪問對象的信息灌輸到緩沖區里,寫滿緩沖區后,程序提醒,Java virtual machine獲取提醒,然后通知動態優化策略挑選器來執行優化。優化后,Java程序返回起始點再執行。
參考文獻
[1]李錫祚,霍華,胡冠.嵌入式 Java 虛擬機優化研究[J].計算機應用與軟件,2009,26(7):257-259.
[2]鄧洋春.Java虛擬機關鍵機制研究與實踐[D].中南大學,2009.
[3]吳志軍,何加銘,曾興斌,等.基于嵌入式Java虛擬機的垃圾收集優化算法[J].計算機工程,2012,38(7):46-48.
[4]陳灝,陳榕.支持復合對象的Java虛擬機內存管理技術研究[J].電腦知識與技術,2011,7(22):5356-5359.
[5]趙銀亮,朱常鵬,韓博,等.以虛擬機為核心實現動態行為調整的方法[J].西安交通大學學報,2013,47(6):6-11.