亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

爪哇執(zhí)行設(shè)備和爪哇執(zhí)行方法

文檔序號:6372301閱讀:202來源:國知局
專利名稱:爪哇執(zhí)行設(shè)備和爪哇執(zhí)行方法
技術(shù)領(lǐng)域
本發(fā)明涉及Java平臺,更具體地說,涉及Java(爪哇)執(zhí)行設(shè)備、Java類文件的配置、Java執(zhí)行方法、Java文件的預(yù)編譯方法以及Java虛擬機(JVM)中的執(zhí)行方法。
背景技術(shù)
由于對各種電子設(shè)備和產(chǎn)品(例如微波爐或遙控器)中包含的軟件所用的獨立于平臺的語言的需求,Sun Microsystems公司引入了Java語言。
為了創(chuàng)建獨立于平臺的執(zhí)行文件,Java將源代碼編譯成Java字節(jié)碼,Java字節(jié)碼在Java虛擬機(JVM)上執(zhí)行。如圖1所示,編譯器120將java格式的Java程序110編譯成類格式的Java執(zhí)行文件。這個類格式的Java執(zhí)行文件由駐留在JVM內(nèi)的解釋器130解釋并執(zhí)行。JVM執(zhí)行3個步驟,即裝載類,在此步驟中裝載執(zhí)行程序所需的所有類;驗證,在此步驟中測試類文件格式、訪問授權(quán)、數(shù)據(jù)格式轉(zhuǎn)換;以及執(zhí)行程序。
圖2示出執(zhí)行Java程序240的Java平臺的層次結(jié)構(gòu)。該層次結(jié)構(gòu)包含用Java語言編寫的Java程序240、包含Java虛擬機(JVM)220和Java應(yīng)用程序接口(API)230的Java平臺以及硬件相關(guān)的平臺210。由于Java執(zhí)行文件是包含平臺中性(platform-neutral)的執(zhí)行代碼(即Java字節(jié)碼)的類文件,僅當提供Java運行環(huán)境(JRE)時才能執(zhí)行Java執(zhí)行文件,而與開發(fā)Java執(zhí)行文件所用的系統(tǒng)無關(guān)。
由于Java具有很多優(yōu)點,例如確保“一次編寫任何平臺執(zhí)行”(WORA)特性的平臺中性、動態(tài)可擴展性等等,這使Java得到了廣泛應(yīng)用。Java被廣泛用作web服務(wù)的服務(wù)器技術(shù),并且在大多數(shù)情況下,web應(yīng)用服務(wù)器是基于Java的。此外,在嵌入設(shè)備中,提供用戶服務(wù)或執(zhí)行控制應(yīng)用程序的運行環(huán)境中也采用Java。特別是,用于移動電話的MexE、用于數(shù)字電視的MHP、DASE、OCAP等等是標準的規(guī)范,這些規(guī)范將嵌入設(shè)備的應(yīng)用環(huán)境定義為基于Java的運行環(huán)境。因此,很明顯,Java將會更廣泛地用于嵌入設(shè)備市場中。
盡管Java被廣泛應(yīng)用于各種用途,與本機應(yīng)用程序相比,Java應(yīng)用程序卻不能表現(xiàn)出令人滿意的性能。
近來,已經(jīng)開發(fā)了很多用來解決有關(guān)Java性能問題的方法,并且由此帶來了一些好處。這些方法通過把方法中所用的Java字節(jié)碼編譯成機器碼,來提高傳統(tǒng)JVM中所用的解釋方法的效率。這些方法可分為以下三種類型第一種類型是及時(JIT)編譯方法。在JIT編譯中,在JVM執(zhí)行Java應(yīng)用程序期間,把在方法調(diào)用點調(diào)用的方法編譯成機器碼,并且直接執(zhí)行機器碼而不是Java字節(jié)碼。
盡管JIT編譯執(zhí)行Java比解釋方法快,但是除了Java應(yīng)用程序所用的存儲器之外,還需要若干兆字節(jié)的隨機存取存儲器(RAM),這是因為JIT編譯需要相當數(shù)量的存儲器,而且通過對方法進行編譯所獲得的機器碼要保存在存儲器中以便其他時間再次使用這些機器碼。此外,由于JIT編譯方法編譯在Java應(yīng)用程序執(zhí)行期間調(diào)用的所有方法,在Java應(yīng)用程序執(zhí)行期間由JIT編譯引起的開銷增大。orp是一種正處于研究階段的使用JIT編譯的JVM類型,它由Intel公司開發(fā)。
第二種類型是動態(tài)自適應(yīng)編譯方法。動態(tài)自適應(yīng)編譯采用JIT編譯方法和解釋方法兩者。在動態(tài)自適應(yīng)編譯中,只編譯對Java平臺的性能產(chǎn)生較大影響的hot方法,而其他方法則使用解釋方法編譯。為了確定哪些方法是hot方法,如果調(diào)用的方法數(shù)目比預(yù)定義的數(shù)目大,則在Java應(yīng)用程序執(zhí)行期間利用多種方法(例如確定hot方法的方法)來進行特征分析。圖3是使用動態(tài)自適應(yīng)編譯的Java平臺300的通用配置。Java平臺300包含類庫320和Java虛擬機(JVM)330。JVM 330包含JIT編譯器340、執(zhí)行不進行JIT編譯的方法的解釋器350、從類文件中裝載所需類的類裝載器360,以及維護在Java應(yīng)用程序執(zhí)行期間所需的數(shù)據(jù)結(jié)構(gòu)(例如方法區(qū)、Java堆棧等等)并且結(jié)合和管理全部組件的運行系統(tǒng)(runtime system)370。
圖4是在使用動態(tài)自適應(yīng)編譯的JVM中執(zhí)行一種方法的典型流程圖。在步驟S410中調(diào)用方法之后,在步驟S420中確定該方法是否已經(jīng)進行過JIT編譯并且擁有機器碼。如果該方法已經(jīng)由JIT編譯方法編譯,則在步驟S460中執(zhí)行機器碼,并且過程返回到步驟S410。如果方法未經(jīng)JIT編譯,則在步驟S430中提出并更新被調(diào)用方法的特征信息(profile information)。然后,在步驟S440中基于特征信息確定被調(diào)用方法是否是hot(熱門)方法。如果被調(diào)用方法是hot方法,則在步驟S450中將關(guān)于該方法的信息傳送給JIT編譯器,并且對該方法的Java字節(jié)碼進行JIT編譯。通過JIT編譯所獲得的目標機器碼作為JIT編譯的結(jié)果執(zhí)行。如果被調(diào)用方法不是hot方法,則在步驟S470中將被調(diào)用該方法的信息傳送給解釋器,并且執(zhí)行被調(diào)用方法。被調(diào)用方法執(zhí)行完成后,過程返回到調(diào)用方法之前的時間點。圖4中的流程圖也應(yīng)用于方法執(zhí)行期間調(diào)用的其他方法。
由于使用動態(tài)自適應(yīng)編譯的JVM僅編譯全部被執(zhí)行方法的一部分,由編譯全部被執(zhí)行方法造成的等待時間比JIT編譯少。由于要維護的機器碼的數(shù)量少,存儲器負荷變得相對較少。然而,由于hot方法以外的其他方法是先解釋后執(zhí)行的,該方法既需要解釋器也需要JIT編譯器,并且為確定hot方法所進行的特征分析會引起Java應(yīng)用程序執(zhí)行期間的超載。JIT編譯方法和動態(tài)自適應(yīng)編譯方法各有各的利弊。然而,大多數(shù)情況下,在存儲器容量有限的嵌入設(shè)備中,動態(tài)自適應(yīng)編譯方法使用得更為頻繁。Sun Microsystems公司的CVM或Insignia Systems公司的Jeode等等是一種類型的動態(tài)自適應(yīng)編譯方法。
第三種類型是提前(AOT)編譯方法。JVM中包含的JIT編譯器在Java應(yīng)用程序執(zhí)行期間運行。而提前(AOT)編譯器與JVM分離,獨立于JVM使用。AOT編譯器用在應(yīng)用程序開發(fā)環(huán)境中。通常,通過編譯Java類文件來創(chuàng)建可在目標設(shè)備中執(zhí)行的執(zhí)行文件。圖5示出使用AOT編譯器的通用流程。
由AOT編譯器520將Java源文件或類文件格式的應(yīng)用程序文件510編譯成對象文件540,以便應(yīng)用程序文件510能被用于執(zhí)行Java應(yīng)用程序的目標設(shè)備。這里,執(zhí)行Java應(yīng)用程序所需的庫類530也隨應(yīng)用程序文件510被同時編譯??稍谀繕嗽O(shè)備中獨立執(zhí)行的執(zhí)行文件570由連接器550通過將對象文件540與運行系統(tǒng)模塊560鏈接而創(chuàng)建。運行系統(tǒng)模塊560用于提供除字節(jié)碼執(zhí)行引擎外的各種JVM功能,提供諸如碎片(garbage)回收、類型反射等功能。
第三種類型明顯不同于第一種和第二種類型。AOT編譯方法采用與處理用C/C++編寫的程序相同的方法來處理用Java編寫的程序,從而創(chuàng)建依賴于目標環(huán)境的執(zhí)行文件。第一種和第二種類型以標準的Java執(zhí)行文件格式(即類文件)發(fā)布Java應(yīng)用程序,并且當Java應(yīng)用程序在目標設(shè)備中對JVM執(zhí)行編譯時。然而,AOT編譯方法在開發(fā)平臺中執(zhí)行編譯,并在將Java類文件編譯成可在目標環(huán)境中執(zhí)行的執(zhí)行文件之后,發(fā)布Java應(yīng)用程序。
由于這三種類型的方法中存在這些不同,如果采用AOT編譯方法,則Java平臺的兩個重要的優(yōu)點就會變得毫無價值。
采用AOT編譯方法時,變得毫無價值的最重要的優(yōu)點是Java的平臺獨立性。由于Java以用于JVM的執(zhí)行代碼格式(即包含Java字節(jié)碼的類文件)發(fā)布,Java可以由JVM在使用JVM的任何目標硬件平臺中執(zhí)行。然而,如果將Java編譯成只能在使用AOT編譯的特定硬件中執(zhí)行的機器碼,就不可能在其他機器中執(zhí)行Java應(yīng)用程序。
此外,AOT編譯失去了動態(tài)可擴展性這一特性。動態(tài)可擴展性允許Java在Java應(yīng)用程序執(zhí)行期間識別和使用新的執(zhí)行代碼類型,與C/C++相比,這是一項Java獨有的特殊功能。通用AOT編譯方法通過同時編譯應(yīng)用程序類和應(yīng)用程序所用的庫類來創(chuàng)建對象文件,在Java應(yīng)用程序執(zhí)行期間不能裝載和執(zhí)行對象文件以外的新類,而只能裝載和執(zhí)行對象文件中包含的應(yīng)用程序類和庫類。
盡管如上所述,AOT編譯方法失去了Java的重要優(yōu)點,由于編譯是在應(yīng)用程序發(fā)布之前在開發(fā)環(huán)境中執(zhí)行的,采用最優(yōu)化技術(shù)創(chuàng)建具有快速性能能力的執(zhí)行文件是可能的。因此,在已規(guī)定目標Java運行環(huán)境,并且Java應(yīng)用程序的執(zhí)行速度是非常重要的因素時,可采用AOT編譯方法。 GUN公司的Gcj符合AOT編譯器。
由于這三種類型具有彼此不同的優(yōu)點、缺點和特性,每種方法都有其最適用的目標Java運行環(huán)境和目標機器的目的,當目標機器中安裝了Java平臺時就已選擇方法。然而,Java還有許多與性能相關(guān)的問題。特別是由于存儲器的限制,很難在嵌入設(shè)備中使用JIT編譯。因此,Java的適用性受到限制。

發(fā)明內(nèi)容
本發(fā)明提供一種Java執(zhí)行設(shè)備、Java類文件的配置、Java執(zhí)行方法、Java文件的預(yù)編譯方法以及Java虛擬機(JVM)中的執(zhí)行方法,這些能夠在確保Java平臺的平臺獨立性和動態(tài)可擴展性的同時提高Java平臺的性能。
在大多數(shù)情況下,運行Java應(yīng)用程序所執(zhí)行的代碼與Java平臺中包含的類庫代碼一致,而不與應(yīng)用程序開發(fā)器提供的應(yīng)用程序代碼一致,并且需要比應(yīng)用程序代碼更多的執(zhí)行時間。此外,Java應(yīng)用程序類應(yīng)以java類文件格式發(fā)布,以便能在任何機器上執(zhí)行。然而,由于類庫代碼被預(yù)先安裝在裝有JVM的特定機器上,類庫代碼是否依賴于硬件就無關(guān)緊要。
因此,如果能夠只對類庫代碼預(yù)先執(zhí)行提前(AOT)編譯,并且當Java應(yīng)用程序在JVM中執(zhí)行時使用編譯過的類庫,就能大大提高Java平臺的性能。此外,由于以Java類文件格式發(fā)布的Java應(yīng)用程序可在JVM中使用解釋方法來執(zhí)行,獲得Java的平臺獨立性是可能的。
為了獲得平臺獨立性,本發(fā)明提供機器碼類(m類)文件,該文件具有與Java類文件相同的特性和內(nèi)容。m類文件與傳統(tǒng)類文件的不同之處在于它包含用于特定目標機器的機器碼而不是硬件中性的Java字節(jié)碼。此外,本發(fā)明提供提前(AOT)編譯器,該編譯器可通過只編譯輸入類文件而不是全部類文件來創(chuàng)建m類文件。因此,由AOT編譯器把類庫編譯成適合于目標機器的機器碼是有可能的。
根據(jù)本發(fā)明的一個方面,提供了一種Java執(zhí)行設(shè)備,包括擴展類庫和Java虛擬機(JVM),擴展類庫包含預(yù)編譯標準類庫中包含的類文件所獲得的機器碼類文件,Java虛擬機(JVM)執(zhí)行機器碼類文件或擴展類庫中包含的應(yīng)用程序文件。
根據(jù)本發(fā)明的另一方面,提供了一種Java類文件的配置,其中Java類文件包括常數(shù)、域和方法,該方法的方法信息包括由機器指令構(gòu)成的代碼屬性,其中機器指令包含插入了符號引用信息的操作數(shù)。
根據(jù)本發(fā)明的又一方面,提供了一種Java文件的預(yù)編譯方法,該方法包括將Java類文件或Java源文件轉(zhuǎn)換成機器指令,其中機器指令包含插入了符號引用信息的操作數(shù)。
根據(jù)本發(fā)明的又一方面,提供了一種Java虛擬機(JVM)中的執(zhí)行方法,該執(zhí)行方法包括確定待執(zhí)行方法的方法信息是否包含由機器指令構(gòu)成的代碼屬性,其中機器指令包含插入了符號引用信息的操作數(shù);如果待執(zhí)行方法的方法信息包含由機器指令構(gòu)成的代碼屬性,則將符號引用信息與地址連接,并執(zhí)行機器指令。


下面,通過結(jié)合附圖對示例性的實施例進行詳細地描述,本發(fā)明的上述和其他目的和特點將會變得更加清楚,其中圖1是說明執(zhí)行Java程序的通用過程的概念圖;圖2是通用Java程序的層次結(jié)構(gòu)的概念圖;圖3是根據(jù)傳統(tǒng)技術(shù)的第一個Java平臺示例的說明圖;圖4是示出圖3中的第一個Java平臺示例的操作過程的流程圖;圖5是根據(jù)傳統(tǒng)技術(shù)的第二個Java平臺示例的說明圖;圖6A是根據(jù)本發(fā)明編譯應(yīng)用程序源文件的過程的概念圖;圖6B是根據(jù)本發(fā)明編譯庫源或類文件的過程的概念圖;圖6C是根據(jù)本發(fā)明機器碼類(m類)文件的機器指令操作數(shù)中的符號引用的說明圖;圖7是根據(jù)本發(fā)明的Java平臺的配置示例的說明圖;圖8是示出在圖7所示的Java平臺中執(zhí)行方法的過程的流程圖;圖9是示出根據(jù)本發(fā)明將輸入類文件編譯成m類文件的過程的流程圖;圖10是根據(jù)本發(fā)明的m類文件的配置的說明圖;圖11是圖10中的m代碼屬性(mcode_attribute)的配置的說明圖;圖12A是根據(jù)本發(fā)明具有m類文件的機器指令操作數(shù)中的符號引用的公共格式的說明圖;圖12B是具有對依據(jù)圖12A所示的符號引用的公共格式的常數(shù)池(pool)符號的符號引用的格式的說明圖;圖12C是具有對依據(jù)圖12A所示的符號引用的公共格式的JVM內(nèi)部符號的符號引用的格式的說明圖;圖12D是依據(jù)圖12A所示的符號引用的公共格式的表示數(shù)據(jù)塊中位置的符號引用格式的說明圖;圖13示出圖12B所示的常數(shù)池符號的類型;圖14示出圖12C所示的JVM內(nèi)部符號的指示符;以及圖15示出用于比較傳統(tǒng)的orp平臺和本發(fā)明的m-orp平臺的測試結(jié)果。
具體實施例方式
以下,結(jié)合附圖更全面地說明本發(fā)明的實施例,附圖示出了發(fā)明的優(yōu)選圖6A是根據(jù)本發(fā)明編譯應(yīng)用程序源文件610的過程的概念圖,圖6B是根據(jù)本發(fā)明編譯庫源或類文件640的過程的概念圖。
如圖6A所示,由Java編譯器620將Java應(yīng)用程序源文件(.java)610編譯成應(yīng)用程序類文件(.class)630。
如圖6B所示,由提前(AOT)編譯器650將庫源或類文件(.java或.class)640編譯成機器碼類(m類)文件660。
如圖6C所示,m類文件660包含機器指令670。機器指令670由操作(op)碼671和操作數(shù)672組成。如果操作數(shù)672是符號地址,則由對符號表680的符號引用來代替符號地址,在符號表680中對索引和其他信息編碼。
圖7是根據(jù)本發(fā)明的Java平臺700的說明圖。
Java平臺700包含m類庫720和Java虛擬機(JVM)730。JVM 730包含m類鏈接器740、解釋器750、擴展類裝載器760和運行系統(tǒng)770。
這里,m類庫720僅由AOT編譯器650編譯的m類文件組成。然而,m類庫720既可以包含標準類文件又可以包含m類文件。
m類鏈接器740解釋有關(guān)包含在m類庫720中的m類文件的方法的m代碼屬性(mcode_attribute)的信息,并將解釋過的信息轉(zhuǎn)換成可執(zhí)行的機器碼。解釋和轉(zhuǎn)換主要包括將由AOT編譯器650插入到機器碼中的符號引用轉(zhuǎn)換成符號地址。此外,m類鏈接器740從m代碼屬性信息中解碼出用于處理異?;驁?zhí)行碎片回收的信息,并將這些信息轉(zhuǎn)換成JVM 730可用的數(shù)據(jù)。擴展類裝載器760是擴展的,以便既能夠處理標準類文件也能夠處理m類文件。解釋器750與傳統(tǒng)JVM的解釋器的類型相同,可處理沒有被預(yù)編譯成m類文件的類文件。及時(JIT)編譯器可被用作解釋器750。運行系統(tǒng)770與傳統(tǒng)JVM的運行系統(tǒng)的類型相同,可處理m類文件。
應(yīng)用程序類710由JVM 730的擴展類裝載器760裝載,有關(guān)應(yīng)用程序類710的信息存儲在運行系統(tǒng)770的數(shù)據(jù)結(jié)構(gòu)中。作為Java應(yīng)用程序的第一個方法的主要(main)方法,被傳送到m類鏈接器740或解釋器750中,并被執(zhí)行。
圖7示出這種一種情況,即預(yù)先安裝在目標機器中的庫(m類庫720)由m類文件組成,而且Java應(yīng)用程序是標準Java類文件。然而,庫既可以包括標準類文件又可以包括m類文件。而且,如果用戶已知要執(zhí)行的目標處理器,Java應(yīng)用程序也可在轉(zhuǎn)換成m類文件之后發(fā)布。圖7中,由于Java應(yīng)用程序以類文件格式發(fā)布,main方法被傳送到解釋器750,并在解釋器750中執(zhí)行。然而,如果Java應(yīng)用程序以m類文件格式發(fā)布,則main方法被傳送到m類鏈接器740,并在m類鏈接器740中執(zhí)行。
下文將說明生成m類庫720中包含的m類文件的流程以及m類文件的配置。
圖9是示出將類文件編譯成m類文件的過程的流程圖。
根據(jù)本發(fā)明,AOT編譯器獨立編譯輸入到自身的類文件的每個方法。
首先,收集用于給局部變量分配寄存器和執(zhí)行碎片回收的信息,在掃描方法的全部Java字節(jié)碼的同時對這些信息進行預(yù)處理(步驟S910)。
其次,基于步驟S910所獲得的信息將寄存器分配給局部變量(步驟S920)。
在代碼產(chǎn)生步驟(步驟S930)中,產(chǎn)生來自目標機器的與各Java字節(jié)碼對應(yīng)的指令序列。這里,在指令序列的操作數(shù)中插入符號引用信息,而不是符號地址。
在代碼發(fā)放步驟(步驟S940)中,將在步驟S930中產(chǎn)生的指令序列存儲在相鄰的存儲器空間中。
在代碼產(chǎn)生步驟(步驟S930)中,能產(chǎn)生包含修補(patch)(例如向前引用)需求的指令。然而,在代碼和數(shù)據(jù)修補步驟(步驟S950)中,修補這樣的指令和數(shù)據(jù)塊的內(nèi)容。在步驟S950中,以與步驟S930相同的方式,在指令序列的操作數(shù)中插入符號引用信息,而不是符號地址。當AOT編譯器已完成AOT編譯之后,創(chuàng)建由機器指令構(gòu)成的m類文件。
下面將結(jié)合圖10說明m類文件1000的配置。
根據(jù)本發(fā)明,m類文件1000用來存儲AOT編譯的結(jié)果。
m類文件格式1000是JVM規(guī)范中規(guī)定的標準Java類文件的擴展格式。m類文件1000包含常數(shù)1010、域1020和方法1030。方法1030的方法信息(method_info)1040包含m代碼屬性(mcode_attribute)1050。m代碼屬性1050是具有名字“com.samsung.mcode”的用戶定義屬性,包含AOT編譯的結(jié)果。該用戶定義屬性與標準類文件規(guī)范的“代碼(Code)”屬性一致,包含機器碼信息和其他執(zhí)行信息,而不是Java字節(jié)碼信息。m類文件1000的特征在于用這個用戶定義的屬性代替“代碼”屬性,或者說除“代碼”屬性之外,在m類文件1000中還包含這個用戶定義屬性。用統(tǒng)一資源定位器(URL)格式表示的名字“com.samsung.mcode”遵守類文件規(guī)范中規(guī)定的用戶定義屬性的命名規(guī)則。如果m類文件1000既包含具有名字“com.samsung.mcode”的用戶定義屬性又包含“代碼”屬性,那么它完全遵守標準類文件規(guī)范。也就是說,盡管JVM不能識別和使用m類文件1000的特殊信息,但它能夠通過以標準類文件格式裝載m類文件1000來執(zhí)行m類文件1000。
m代碼屬性1050與標準類文件的代碼屬性一致,包含目標處理器指令(而不是Java字節(jié)碼)以及其他執(zhí)行Java應(yīng)用程序的信息。
圖11示出m代碼屬性1050的示例,m代碼屬性1050的配置遵守類文件規(guī)范中規(guī)定的屬性格式。
根據(jù)類文件規(guī)范的屬性格式,m代碼屬性1050包含與執(zhí)行代碼一致的區(qū)段和存儲數(shù)據(jù)信息的區(qū)段。
屬性名索引1051表示屬性名,屬性長度1052表示全部屬性的長度,m代碼(mcode)1053表示m代碼1054的長度。
根據(jù)本發(fā)明,包含由AOT編譯器編譯的Java字節(jié)碼的目標處理器指令存儲在m代碼1054中,指令的格式被部分改變以便將符號引用(而不是符號地址)用于指令的操作數(shù)中。在目標處理器中實際執(zhí)行m代碼1054之前,需要使用符號解析等技術(shù)來對它進行處理。
數(shù)據(jù)塊長度1055表示數(shù)據(jù)塊1056的長度,數(shù)據(jù)塊1056存儲浮點型十進制數(shù)值或轉(zhuǎn)移表。
符號引用列表1057包含有關(guān)代碼中包含的符號位置和數(shù)據(jù)的信息。
異常處理信息1058包含用于處理異常的信息,碎片回收(GC)信息1059包含用于碎片回收的信息。
根據(jù)本發(fā)明,AOT編譯器在產(chǎn)生執(zhí)行方法所需的機器碼以及機器碼在執(zhí)行方法期間所引用的數(shù)據(jù)塊1056方面起著重要作用。然而,沒有對Java字節(jié)碼的需求,AOT編譯器不可能完整地執(zhí)行自身功能,因此,要收集附加信息并將其存儲在m類文件中。
用于處理異常的信息必須作為附加信息存儲在m類文件中,因為當異常發(fā)生時,JVM必須通過在執(zhí)行堆棧展開的同時搜索異常處理器的準確位置來改變執(zhí)行過程。異常處理信息1058存儲這種用于處理異常的信息。
其次,需要堆棧中的用于處理碎片回收的類型信息。Java字節(jié)碼包含操作數(shù)的類型信息,當Java字節(jié)碼轉(zhuǎn)換成機器碼之后,操作數(shù)的類型信息就會丟失。然而,生成GC時,需要操作數(shù)的類型信息,這種類型信息存儲在GC信息1059中。
圖10所示的m類文件1000的配置和圖11所示的m代碼屬性1050的配置僅僅是AOT編譯結(jié)果的存儲格式的示例,本領(lǐng)域技術(shù)人員能夠充分理解到本發(fā)明不被限制在這種存儲格式上。
為賦予m類文件1000以與Java類文件相同的特性,應(yīng)允許在m類文件1000中以與Java類文件相同的方式來動態(tài)鏈接所有符號。由于Java類文件使用符號引用來指示Java字節(jié)碼的對象的域和方法,Java類文件就有可能動態(tài)鏈接所有符號。因此,盡管Java類文件被AOT編譯成目標機器碼,如果使用符號引用來指示目標機器碼的指令操作數(shù)中的對象的域或方法,就有可能實現(xiàn)Java的動態(tài)裝載/鏈接。
m類文件1000中包含的目標機器碼使用符號引用而不是符號地址來指示特殊的域或方法,而且可改變目標機器碼的指令格式,以便能把符號引用信息插入到目標機器碼的指令中??墒褂肑VM的符號地址來插入包含符號引用信息的指令,并且將其轉(zhuǎn)換成執(zhí)行代碼。為了使JVM能夠識別和使用m類文件1000,要將各符號引用轉(zhuǎn)換成地址,并且在Java應(yīng)用程序執(zhí)行期間執(zhí)行其他過程。然而,由于符號引用的轉(zhuǎn)換和其他過程比JIT編譯簡單,就有可能獲得比使用JIT編譯更優(yōu)的機器碼,因此,Java平臺能夠表現(xiàn)出改進的性能。
根據(jù)本發(fā)明的AOT編譯器,將所有的符號引用1210編碼成如圖12A所示的32位格式,即符號引用1210的公共格式,并且將已編碼的符號引用1210包含進指令1200的操作數(shù)中。
如果具有x86格式的指令1200的操作數(shù)與符號地址對應(yīng),則操作數(shù)占用32字節(jié),因此,編碼成32位格式的符號引用1210可被包含進指令1200的操作數(shù)中。如果將AOT編譯器用于其他處理器,可根據(jù)處理器的特殊指令改變符號引用1210的公共格式。
在符號引用1210的公共格式中,第一個2位段1211用作表示符號引用1210的各種類型的標志。接下來的14位段1212用作連接所有符號引用1210的鏈路,其范圍從當前符號引用的最后一個字節(jié)之后的第一個字節(jié)到當前符號引用之后的符號引用的第一個字節(jié)。剩下的16位段1213包含尋找當前符號引用所指示的符號所用的值。
代碼中所用的符號可被分成3種類型,即圖12B所示的常數(shù)池中包含的符號(常數(shù)池符號),圖12C所示的JVM內(nèi)部區(qū)域中包含的符號(JVM內(nèi)部符號),以及圖12D所示的數(shù)據(jù)塊中的特定位置的信息。
常數(shù)池是包含在類文件中的符號表,含有用于Java字節(jié)碼的所有符號的信息。Java字節(jié)碼使用常數(shù)池項索引作為指示對象的域或方法的操作數(shù)。如果操作數(shù)是常數(shù)池中的類、域或方法,AOT編譯器也使用含有常數(shù)池項索引1223的符號引用,而不是類、域或方法的地址。
符號類型可利用常數(shù)池項來確定。用在AOT編譯器中的符號類型是類、域和方法。每種符號類型都能以兩種方式使用,因此可以使用如圖13所示的6種符號引用。
圖12C示出所有對JVM內(nèi)部符號的符號引用,基于JVM內(nèi)部符號的類型對16位常數(shù)池索引1223進行編碼。圖14示出JVM內(nèi)部符號指示符1233的配置。第一個2位段1410是指示JVM內(nèi)部符號類型的標志,最后的8位1420含有JVM內(nèi)部符號的索引。
由AOT編譯器產(chǎn)生的代碼中所用的各種JVM內(nèi)部符號可以分為4種類型。第一種類型是Java應(yīng)用程序執(zhí)行期間的支持函數(shù),在此把創(chuàng)建用于支持函數(shù)的表所獲得的索引預(yù)先存儲在圖14所示的符號索引1420中。第二種類型是預(yù)裝載的類,如“java.1ang.class”,或預(yù)裝載在JVM內(nèi)部區(qū)域中的本機類,但是這種預(yù)裝載類不包含在已編譯的類文件的常數(shù)池中。這種預(yù)裝載類使用創(chuàng)建用于預(yù)裝載類的表所獲得的索引來指示。第三種類型是JVM中包含的局部變量。第四種類型用來存儲其他符號或指示m類連接器的線索。
在由指令指出數(shù)據(jù)塊的特定位置的情況下,通用指令將特定位置的地址當作操作數(shù)。然而,AOT編譯器把符號引用而不是地址當作操作數(shù)。圖12D示出這種符號引用。圖12D中的最后16位1243用來存儲數(shù)據(jù)塊從頭到尾的長度。
圖8是示出在根據(jù)本發(fā)明的Java平臺中執(zhí)行方法的過程的流程圖800。
如果在步驟S810中調(diào)用了方法,就要確定該方法是否已被m類鏈接器鏈接,或者是第一次被鏈接和執(zhí)行(步驟S820)。
如果以前已執(zhí)行過該方法,則在步驟S860中執(zhí)行以前生成的機器碼。
如果是第一次執(zhí)行該方法,在步驟S830中提取關(guān)于方法的信息,并在步驟S840中確定該方法是否有m代碼屬性。如果該方法有m代碼屬性,則在步驟S850中由m類鏈接器執(zhí)行符號解析,鏈接m代碼,并在步驟S860中執(zhí)行機器碼。如果該方法沒有m代碼屬性,則在步驟S870中由解釋器解釋方法。
下面,結(jié)合圖15說明根據(jù)本發(fā)明的仿真結(jié)果。
圖15示出比較一般orp平臺和根據(jù)本發(fā)明的m-orp平臺的運行速度的對比結(jié)果。對orp平臺和m-orp平臺的測試在安裝Windows XP專業(yè)版作為操作系統(tǒng)的Pentium IV計算機上進行。圖15的表中所示的數(shù)值是通過將HelloWorld應(yīng)用程序重復(fù)10次所得值平均而得。圖15中,F(xiàn)LT表示文件裝載時間,TT表示總時間,JT表示JIT編譯時間,MLT表示m鏈接時間。
從對比結(jié)果中可以看出,F(xiàn)LT占去超過60%的總執(zhí)行時間。這一結(jié)果是由于個人計算機(PC)(即Pentium IV計算機)的運行速度的提高使得JT減少所致,而用于文件裝載的輸入/輸出盤需要的時間相對較長。然而,由于嵌入設(shè)備通常不使用盤,輸入/輸出盤所用的時間比率比圖15所示的數(shù)值低得多。換句話說,圖15的對比結(jié)果中,輸入/輸出盤所用的時間比率相當大,以至于JT和MLT之間的差異不能對Java平臺的性能產(chǎn)生重大影響。然而,在嵌入設(shè)備中,JT和MLT之間的差異卻能明顯影響Java平臺的性能。
在這項對比中,JT是MLT的4倍,由于JT和MLT之間的差異使Java平臺的性能提高了20%??紤]到這項對比是在PC上進行的,在嵌入設(shè)備中,由于排除了用于文件裝載的輸入/輸出盤所用的時間,Java平臺的性能可提高80%。
根據(jù)本發(fā)明,在Java虛擬機(JVM)中以高于先前技術(shù)中使用JIT編譯執(zhí)行方法的速度來執(zhí)行Java程序是可能的。由于JIT編譯是在執(zhí)行Java應(yīng)用程序時執(zhí)行的,JIT編譯受可用的資源或時間所限制。因此,在執(zhí)行JIT編譯時,不能夠充分執(zhí)行運行優(yōu)化。由于這個原因,JIT編譯器產(chǎn)生的代碼通常不是高質(zhì)量的。然而,由于根據(jù)本發(fā)明的AOT編譯在庫類文件或應(yīng)用程序類文件發(fā)布之前執(zhí)行,充分執(zhí)行運行優(yōu)化和創(chuàng)建JIT編譯不可相比的高質(zhì)量機器碼是可能的。在執(zhí)行Java應(yīng)用程序時由JVM對AOT編譯產(chǎn)生的機器碼進行后處理,以使其可用。然而,由于后處理比JIT編譯簡單,在Java應(yīng)用程序執(zhí)行期間產(chǎn)生的開銷很少。因此,當在目標機器中執(zhí)行Java應(yīng)用程序時,根據(jù)本發(fā)明的Java平臺有可能顯示出快捷的運行速度。
此外,根據(jù)本發(fā)明,AOT編譯對隨機存取存儲器(RAM)的需求也比JIT編譯少得多,這說明由于RAM有限而不能使用JIT編譯的嵌入設(shè)備可以采用本發(fā)明。特別是,盡管在嵌入設(shè)備中安裝了Java平臺,由于嵌入設(shè)備資源有限,例如存儲器有限,不能使用JIT編譯,而使用解釋方法。眾所周知,解釋方法以比JIT編譯低得多的速度執(zhí)行Java應(yīng)用程序。根據(jù)本發(fā)明的Java平臺表現(xiàn)出與JIT編譯相比有所改進的性能。如果由于資源有限而不能使用JIT編譯的嵌入設(shè)備,采用根據(jù)本發(fā)明的Java平臺,那么Java平臺能夠表現(xiàn)出改進的性能。
盡管結(jié)合示例性的實施例詳細地顯示和說明了本發(fā)明,但本領(lǐng)域的普通技術(shù)人員可以理解,在不脫離權(quán)利要求限定的本發(fā)明的精神和范圍的情況下,可以對其做出各種形式和細節(jié)的改變。
權(quán)利要求
1.一種Java執(zhí)行設(shè)備,包括擴展類庫,包含預(yù)編譯標準類庫中包含的類文件所獲得的機器碼類文件;以及Java虛擬機(JVM),執(zhí)行機器碼類文件或擴展類庫中包含的應(yīng)用程序文件。
2.根據(jù)權(quán)利要求1的Java執(zhí)行設(shè)備,其中機器碼的機器指令包含插入了符號引用信息的操作數(shù)。
3.根據(jù)權(quán)利要求2的Java執(zhí)行設(shè)備,其中Java虛擬機(JVM)包含類鏈接器,所述類連接器將插入到機器指令操作數(shù)中的符號引用信息轉(zhuǎn)換成地址。
4.一種Java類文件的配置,其中Java類文件包括常數(shù)、域和方法,方法的方法信息包括由機器指令構(gòu)成的代碼屬性,所述機器指令包含插入了符號引用信息的操作數(shù)。
5.根據(jù)權(quán)利要求4的Java類文件的配置,其中該方法信息進一步包括異常處理信息或用于碎片回收的信息。
6.根據(jù)權(quán)利要求4的Java類文件的配置,其中符號引用信息至少包括常數(shù)池符號信息、Java虛擬機(JVM)內(nèi)部符號信息或數(shù)據(jù)塊位置信息之一。
7.一種執(zhí)行Java應(yīng)用程序的方法,所述方法包括(a)將標準類庫中包含的類文件預(yù)編譯成包含機器指令的擴展類庫;(b)擴展的類文件執(zhí)行機器指令;以及(c)使用及時(JIT)編譯方法或解釋方法來執(zhí)行Java應(yīng)用程序文件。
8.根據(jù)權(quán)利要求7的方法,其中步驟(a)進一步包括將符號引用信息插入到機器指令的操作數(shù)中。
9.根據(jù)權(quán)利要求8的方法,其中步驟(b)進一步包括將插入到機器指令操作數(shù)中的符號引用信息轉(zhuǎn)換成地址。
10.一種Java文件的預(yù)編譯方法,所述方法包括將Java類文件或Java源文件轉(zhuǎn)換成機器指令,所述機器指令包含插入了符號引用信息的操作數(shù)。
11.根據(jù)權(quán)利要求10的方法,其中Java類文件包括標準Java類庫中包含的標準類文件。
12.一種Java虛擬機(JVM)中的執(zhí)行方法,所述執(zhí)行方法包括確定待執(zhí)行方法的方法信息是否包含由機器指令構(gòu)成的代碼屬性,所述機器指令包含插入了符號引用信息的操作數(shù);以及如果待執(zhí)行方法的方法信息包含由機器指令構(gòu)成的代碼屬性,則將符號引用信息鏈接到地址,并執(zhí)行機器指令。
13.根據(jù)權(quán)利要求12的方法,其中,如果待執(zhí)行方法的方法信息不包含由機器指令構(gòu)成的代碼屬性,所述執(zhí)行方法進一步包括對方法進行及時(JIT)編譯或解釋。
全文摘要
本發(fā)明提供一種Java執(zhí)行設(shè)備、Java類文件的配置、Java執(zhí)行方法、Java文件的預(yù)編譯方法以及Java虛擬機(JVM)中的執(zhí)行方法。Java執(zhí)行設(shè)備包含擴展類庫和Java虛擬機(JVM),擴展類庫包含預(yù)編譯標準類庫中包含的類文件所獲得的機器碼類文件,Java虛擬機(JVM)執(zhí)行機器碼類文件或擴展類庫中包含的應(yīng)用程序文件。因此,在確保Java平臺的平臺獨立性和動態(tài)可擴展性的同時,提高Java平臺的性能是可能的。
文檔編號G06F9/455GK1504881SQ03148458
公開日2004年6月16日 申請日期2003年6月30日 優(yōu)先權(quán)日2002年12月2日
發(fā)明者鄭云教 申請人:三星電子株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1