專利名稱:爪哇執行設備和爪哇執行方法
技術領域:
本發明涉及Java平臺,更具體地說,涉及Java(爪哇)執行設備、Java類文件的配置、Java執行方法、Java文件的預編譯方法以及Java虛擬機(JVM)中的執行方法。
背景技術:
由于對各種電子設備和產品(例如微波爐或遙控器)中包含的軟件所用的獨立于平臺的語言的需求,Sun Microsystems公司引入了Java語言。
為了創建獨立于平臺的執行文件,Java將源代碼編譯成Java字節碼,Java字節碼在Java虛擬機(JVM)上執行。如圖1所示,編譯器120將java格式的Java程序110編譯成類格式的Java執行文件。這個類格式的Java執行文件由駐留在JVM內的解釋器130解釋并執行。JVM執行3個步驟,即裝載類,在此步驟中裝載執行程序所需的所有類;驗證,在此步驟中測試類文件格式、訪問授權、數據格式轉換;以及執行程序。
圖2示出執行Java程序240的Java平臺的層次結構。該層次結構包含用Java語言編寫的Java程序240、包含Java虛擬機(JVM)220和Java應用程序接口(API)230的Java平臺以及硬件相關的平臺210。由于Java執行文件是包含平臺中性(platform-neutral)的執行代碼(即Java字節碼)的類文件,僅當提供Java運行環境(JRE)時才能執行Java執行文件,而與開發Java執行文件所用的系統無關。
由于Java具有很多優點,例如確保“一次編寫任何平臺執行”(WORA)特性的平臺中性、動態可擴展性等等,這使Java得到了廣泛應用。Java被廣泛用作web服務的服務器技術,并且在大多數情況下,web應用服務器是基于Java的。此外,在嵌入設備中,提供用戶服務或執行控制應用程序的運行環境中也采用Java。特別是,用于移動電話的MexE、用于數字電視的MHP、DASE、OCAP等等是標準的規范,這些規范將嵌入設備的應用環境定義為基于Java的運行環境。因此,很明顯,Java將會更廣泛地用于嵌入設備市場中。
盡管Java被廣泛應用于各種用途,與本機應用程序相比,Java應用程序卻不能表現出令人滿意的性能。
近來,已經開發了很多用來解決有關Java性能問題的方法,并且由此帶來了一些好處。這些方法通過把方法中所用的Java字節碼編譯成機器碼,來提高傳統JVM中所用的解釋方法的效率。這些方法可分為以下三種類型第一種類型是及時(JIT)編譯方法。在JIT編譯中,在JVM執行Java應用程序期間,把在方法調用點調用的方法編譯成機器碼,并且直接執行機器碼而不是Java字節碼。
盡管JIT編譯執行Java比解釋方法快,但是除了Java應用程序所用的存儲器之外,還需要若干兆字節的隨機存取存儲器(RAM),這是因為JIT編譯需要相當數量的存儲器,而且通過對方法進行編譯所獲得的機器碼要保存在存儲器中以便其他時間再次使用這些機器碼。此外,由于JIT編譯方法編譯在Java應用程序執行期間調用的所有方法,在Java應用程序執行期間由JIT編譯引起的開銷增大。orp是一種正處于研究階段的使用JIT編譯的JVM類型,它由Intel公司開發。
第二種類型是動態自適應編譯方法。動態自適應編譯采用JIT編譯方法和解釋方法兩者。在動態自適應編譯中,只編譯對Java平臺的性能產生較大影響的hot方法,而其他方法則使用解釋方法編譯。為了確定哪些方法是hot方法,如果調用的方法數目比預定義的數目大,則在Java應用程序執行期間利用多種方法(例如確定hot方法的方法)來進行特征分析。圖3是使用動態自適應編譯的Java平臺300的通用配置。Java平臺300包含類庫320和Java虛擬機(JVM)330。JVM 330包含JIT編譯器340、執行不進行JIT編譯的方法的解釋器350、從類文件中裝載所需類的類裝載器360,以及維護在Java應用程序執行期間所需的數據結構(例如方法區、Java堆棧等等)并且結合和管理全部組件的運行系統(runtime system)370。
圖4是在使用動態自適應編譯的JVM中執行一種方法的典型流程圖。在步驟S410中調用方法之后,在步驟S420中確定該方法是否已經進行過JIT編譯并且擁有機器碼。如果該方法已經由JIT編譯方法編譯,則在步驟S460中執行機器碼,并且過程返回到步驟S410。如果方法未經JIT編譯,則在步驟S430中提出并更新被調用方法的特征信息(profile information)。然后,在步驟S440中基于特征信息確定被調用方法是否是hot(熱門)方法。如果被調用方法是hot方法,則在步驟S450中將關于該方法的信息傳送給JIT編譯器,并且對該方法的Java字節碼進行JIT編譯。通過JIT編譯所獲得的目標機器碼作為JIT編譯的結果執行。如果被調用方法不是hot方法,則在步驟S470中將被調用該方法的信息傳送給解釋器,并且執行被調用方法。被調用方法執行完成后,過程返回到調用方法之前的時間點。圖4中的流程圖也應用于方法執行期間調用的其他方法。
由于使用動態自適應編譯的JVM僅編譯全部被執行方法的一部分,由編譯全部被執行方法造成的等待時間比JIT編譯少。由于要維護的機器碼的數量少,存儲器負荷變得相對較少。然而,由于hot方法以外的其他方法是先解釋后執行的,該方法既需要解釋器也需要JIT編譯器,并且為確定hot方法所進行的特征分析會引起Java應用程序執行期間的超載。JIT編譯方法和動態自適應編譯方法各有各的利弊。然而,大多數情況下,在存儲器容量有限的嵌入設備中,動態自適應編譯方法使用得更為頻繁。Sun Microsystems公司的CVM或Insignia Systems公司的Jeode等等是一種類型的動態自適應編譯方法。
第三種類型是提前(AOT)編譯方法。JVM中包含的JIT編譯器在Java應用程序執行期間運行。而提前(AOT)編譯器與JVM分離,獨立于JVM使用。AOT編譯器用在應用程序開發環境中。通常,通過編譯Java類文件來創建可在目標設備中執行的執行文件。圖5示出使用AOT編譯器的通用流程。
由AOT編譯器520將Java源文件或類文件格式的應用程序文件510編譯成對象文件540,以便應用程序文件510能被用于執行Java應用程序的目標設備。這里,執行Java應用程序所需的庫類530也隨應用程序文件510被同時編譯。可在目標設備中獨立執行的執行文件570由連接器550通過將對象文件540與運行系統模塊560鏈接而創建。運行系統模塊560用于提供除字節碼執行引擎外的各種JVM功能,提供諸如碎片(garbage)回收、類型反射等功能。
第三種類型明顯不同于第一種和第二種類型。AOT編譯方法采用與處理用C/C++編寫的程序相同的方法來處理用Java編寫的程序,從而創建依賴于目標環境的執行文件。第一種和第二種類型以標準的Java執行文件格式(即類文件)發布Java應用程序,并且當Java應用程序在目標設備中對JVM執行編譯時。然而,AOT編譯方法在開發平臺中執行編譯,并在將Java類文件編譯成可在目標環境中執行的執行文件之后,發布Java應用程序。
由于這三種類型的方法中存在這些不同,如果采用AOT編譯方法,則Java平臺的兩個重要的優點就會變得毫無價值。
采用AOT編譯方法時,變得毫無價值的最重要的優點是Java的平臺獨立性。由于Java以用于JVM的執行代碼格式(即包含Java字節碼的類文件)發布,Java可以由JVM在使用JVM的任何目標硬件平臺中執行。然而,如果將Java編譯成只能在使用AOT編譯的特定硬件中執行的機器碼,就不可能在其他機器中執行Java應用程序。
此外,AOT編譯失去了動態可擴展性這一特性。動態可擴展性允許Java在Java應用程序執行期間識別和使用新的執行代碼類型,與C/C++相比,這是一項Java獨有的特殊功能。通用AOT編譯方法通過同時編譯應用程序類和應用程序所用的庫類來創建對象文件,在Java應用程序執行期間不能裝載和執行對象文件以外的新類,而只能裝載和執行對象文件中包含的應用程序類和庫類。
盡管如上所述,AOT編譯方法失去了Java的重要優點,由于編譯是在應用程序發布之前在開發環境中執行的,采用最優化技術創建具有快速性能能力的執行文件是可能的。因此,在已規定目標Java運行環境,并且Java應用程序的執行速度是非常重要的因素時,可采用AOT編譯方法。 GUN公司的Gcj符合AOT編譯器。
由于這三種類型具有彼此不同的優點、缺點和特性,每種方法都有其最適用的目標Java運行環境和目標機器的目的,當目標機器中安裝了Java平臺時就已選擇方法。然而,Java還有許多與性能相關的問題。特別是由于存儲器的限制,很難在嵌入設備中使用JIT編譯。因此,Java的適用性受到限制。
發明內容
本發明提供一種Java執行設備、Java類文件的配置、Java執行方法、Java文件的預編譯方法以及Java虛擬機(JVM)中的執行方法,這些能夠在確保Java平臺的平臺獨立性和動態可擴展性的同時提高Java平臺的性能。
在大多數情況下,運行Java應用程序所執行的代碼與Java平臺中包含的類庫代碼一致,而不與應用程序開發器提供的應用程序代碼一致,并且需要比應用程序代碼更多的執行時間。此外,Java應用程序類應以java類文件格式發布,以便能在任何機器上執行。然而,由于類庫代碼被預先安裝在裝有JVM的特定機器上,類庫代碼是否依賴于硬件就無關緊要。
因此,如果能夠只對類庫代碼預先執行提前(AOT)編譯,并且當Java應用程序在JVM中執行時使用編譯過的類庫,就能大大提高Java平臺的性能。此外,由于以Java類文件格式發布的Java應用程序可在JVM中使用解釋方法來執行,獲得Java的平臺獨立性是可能的。
為了獲得平臺獨立性,本發明提供機器碼類(m類)文件,該文件具有與Java類文件相同的特性和內容。m類文件與傳統類文件的不同之處在于它包含用于特定目標機器的機器碼而不是硬件中性的Java字節碼。此外,本發明提供提前(AOT)編譯器,該編譯器可通過只編譯輸入類文件而不是全部類文件來創建m類文件。因此,由AOT編譯器把類庫編譯成適合于目標機器的機器碼是有可能的。
根據本發明的一個方面,提供了一種Java執行設備,包括擴展類庫和Java虛擬機(JVM),擴展類庫包含預編譯標準類庫中包含的類文件所獲得的機器碼類文件,Java虛擬機(JVM)執行機器碼類文件或擴展類庫中包含的應用程序文件。
根據本發明的另一方面,提供了一種Java類文件的配置,其中Java類文件包括常數、域和方法,該方法的方法信息包括由機器指令構成的代碼屬性,其中機器指令包含插入了符號引用信息的操作數。
根據本發明的又一方面,提供了一種Java文件的預編譯方法,該方法包括將Java類文件或Java源文件轉換成機器指令,其中機器指令包含插入了符號引用信息的操作數。
根據本發明的又一方面,提供了一種Java虛擬機(JVM)中的執行方法,該執行方法包括確定待執行方法的方法信息是否包含由機器指令構成的代碼屬性,其中機器指令包含插入了符號引用信息的操作數;如果待執行方法的方法信息包含由機器指令構成的代碼屬性,則將符號引用信息與地址連接,并執行機器指令。
下面,通過結合附圖對示例性的實施例進行詳細地描述,本發明的上述和其他目的和特點將會變得更加清楚,其中圖1是說明執行Java程序的通用過程的概念圖;圖2是通用Java程序的層次結構的概念圖;圖3是根據傳統技術的第一個Java平臺示例的說明圖;圖4是示出圖3中的第一個Java平臺示例的操作過程的流程圖;圖5是根據傳統技術的第二個Java平臺示例的說明圖;圖6A是根據本發明編譯應用程序源文件的過程的概念圖;圖6B是根據本發明編譯庫源或類文件的過程的概念圖;圖6C是根據本發明機器碼類(m類)文件的機器指令操作數中的符號引用的說明圖;圖7是根據本發明的Java平臺的配置示例的說明圖;圖8是示出在圖7所示的Java平臺中執行方法的過程的流程圖;圖9是示出根據本發明將輸入類文件編譯成m類文件的過程的流程圖;圖10是根據本發明的m類文件的配置的說明圖;圖11是圖10中的m代碼屬性(mcode_attribute)的配置的說明圖;圖12A是根據本發明具有m類文件的機器指令操作數中的符號引用的公共格式的說明圖;圖12B是具有對依據圖12A所示的符號引用的公共格式的常數池(pool)符號的符號引用的格式的說明圖;圖12C是具有對依據圖12A所示的符號引用的公共格式的JVM內部符號的符號引用的格式的說明圖;圖12D是依據圖12A所示的符號引用的公共格式的表示數據塊中位置的符號引用格式的說明圖;圖13示出圖12B所示的常數池符號的類型;圖14示出圖12C所示的JVM內部符號的指示符;以及圖15示出用于比較傳統的orp平臺和本發明的m-orp平臺的測試結果。
具體實施例方式
以下,結合附圖更全面地說明本發明的實施例,附圖示出了發明的優選圖6A是根據本發明編譯應用程序源文件610的過程的概念圖,圖6B是根據本發明編譯庫源或類文件640的過程的概念圖。
如圖6A所示,由Java編譯器620將Java應用程序源文件(.java)610編譯成應用程序類文件(.class)630。
如圖6B所示,由提前(AOT)編譯器650將庫源或類文件(.java或.class)640編譯成機器碼類(m類)文件660。
如圖6C所示,m類文件660包含機器指令670。機器指令670由操作(op)碼671和操作數672組成。如果操作數672是符號地址,則由對符號表680的符號引用來代替符號地址,在符號表680中對索引和其他信息編碼。
圖7是根據本發明的Java平臺700的說明圖。
Java平臺700包含m類庫720和Java虛擬機(JVM)730。JVM 730包含m類鏈接器740、解釋器750、擴展類裝載器760和運行系統770。
這里,m類庫720僅由AOT編譯器650編譯的m類文件組成。然而,m類庫720既可以包含標準類文件又可以包含m類文件。
m類鏈接器740解釋有關包含在m類庫720中的m類文件的方法的m代碼屬性(mcode_attribute)的信息,并將解釋過的信息轉換成可執行的機器碼。解釋和轉換主要包括將由AOT編譯器650插入到機器碼中的符號引用轉換成符號地址。此外,m類鏈接器740從m代碼屬性信息中解碼出用于處理異常或執行碎片回收的信息,并將這些信息轉換成JVM 730可用的數據。擴展類裝載器760是擴展的,以便既能夠處理標準類文件也能夠處理m類文件。解釋器750與傳統JVM的解釋器的類型相同,可處理沒有被預編譯成m類文件的類文件。及時(JIT)編譯器可被用作解釋器750。運行系統770與傳統JVM的運行系統的類型相同,可處理m類文件。
應用程序類710由JVM 730的擴展類裝載器760裝載,有關應用程序類710的信息存儲在運行系統770的數據結構中。作為Java應用程序的第一個方法的主要(main)方法,被傳送到m類鏈接器740或解釋器750中,并被執行。
圖7示出這種一種情況,即預先安裝在目標機器中的庫(m類庫720)由m類文件組成,而且Java應用程序是標準Java類文件。然而,庫既可以包括標準類文件又可以包括m類文件。而且,如果用戶已知要執行的目標處理器,Java應用程序也可在轉換成m類文件之后發布。圖7中,由于Java應用程序以類文件格式發布,main方法被傳送到解釋器750,并在解釋器750中執行。然而,如果Java應用程序以m類文件格式發布,則main方法被傳送到m類鏈接器740,并在m類鏈接器740中執行。
下文將說明生成m類庫720中包含的m類文件的流程以及m類文件的配置。
圖9是示出將類文件編譯成m類文件的過程的流程圖。
根據本發明,AOT編譯器獨立編譯輸入到自身的類文件的每個方法。
首先,收集用于給局部變量分配寄存器和執行碎片回收的信息,在掃描方法的全部Java字節碼的同時對這些信息進行預處理(步驟S910)。
其次,基于步驟S910所獲得的信息將寄存器分配給局部變量(步驟S920)。
在代碼產生步驟(步驟S930)中,產生來自目標機器的與各Java字節碼對應的指令序列。這里,在指令序列的操作數中插入符號引用信息,而不是符號地址。
在代碼發放步驟(步驟S940)中,將在步驟S930中產生的指令序列存儲在相鄰的存儲器空間中。
在代碼產生步驟(步驟S930)中,能產生包含修補(patch)(例如向前引用)需求的指令。然而,在代碼和數據修補步驟(步驟S950)中,修補這樣的指令和數據塊的內容。在步驟S950中,以與步驟S930相同的方式,在指令序列的操作數中插入符號引用信息,而不是符號地址。當AOT編譯器已完成AOT編譯之后,創建由機器指令構成的m類文件。
下面將結合圖10說明m類文件1000的配置。
根據本發明,m類文件1000用來存儲AOT編譯的結果。
m類文件格式1000是JVM規范中規定的標準Java類文件的擴展格式。m類文件1000包含常數1010、域1020和方法1030。方法1030的方法信息(method_info)1040包含m代碼屬性(mcode_attribute)1050。m代碼屬性1050是具有名字“com.samsung.mcode”的用戶定義屬性,包含AOT編譯的結果。該用戶定義屬性與標準類文件規范的“代碼(Code)”屬性一致,包含機器碼信息和其他執行信息,而不是Java字節碼信息。m類文件1000的特征在于用這個用戶定義的屬性代替“代碼”屬性,或者說除“代碼”屬性之外,在m類文件1000中還包含這個用戶定義屬性。用統一資源定位器(URL)格式表示的名字“com.samsung.mcode”遵守類文件規范中規定的用戶定義屬性的命名規則。如果m類文件1000既包含具有名字“com.samsung.mcode”的用戶定義屬性又包含“代碼”屬性,那么它完全遵守標準類文件規范。也就是說,盡管JVM不能識別和使用m類文件1000的特殊信息,但它能夠通過以標準類文件格式裝載m類文件1000來執行m類文件1000。
m代碼屬性1050與標準類文件的代碼屬性一致,包含目標處理器指令(而不是Java字節碼)以及其他執行Java應用程序的信息。
圖11示出m代碼屬性1050的示例,m代碼屬性1050的配置遵守類文件規范中規定的屬性格式。
根據類文件規范的屬性格式,m代碼屬性1050包含與執行代碼一致的區段和存儲數據信息的區段。
屬性名索引1051表示屬性名,屬性長度1052表示全部屬性的長度,m代碼(mcode)1053表示m代碼1054的長度。
根據本發明,包含由AOT編譯器編譯的Java字節碼的目標處理器指令存儲在m代碼1054中,指令的格式被部分改變以便將符號引用(而不是符號地址)用于指令的操作數中。在目標處理器中實際執行m代碼1054之前,需要使用符號解析等技術來對它進行處理。
數據塊長度1055表示數據塊1056的長度,數據塊1056存儲浮點型十進制數值或轉移表。
符號引用列表1057包含有關代碼中包含的符號位置和數據的信息。
異常處理信息1058包含用于處理異常的信息,碎片回收(GC)信息1059包含用于碎片回收的信息。
根據本發明,AOT編譯器在產生執行方法所需的機器碼以及機器碼在執行方法期間所引用的數據塊1056方面起著重要作用。然而,沒有對Java字節碼的需求,AOT編譯器不可能完整地執行自身功能,因此,要收集附加信息并將其存儲在m類文件中。
用于處理異常的信息必須作為附加信息存儲在m類文件中,因為當異常發生時,JVM必須通過在執行堆棧展開的同時搜索異常處理器的準確位置來改變執行過程。異常處理信息1058存儲這種用于處理異常的信息。
其次,需要堆棧中的用于處理碎片回收的類型信息。Java字節碼包含操作數的類型信息,當Java字節碼轉換成機器碼之后,操作數的類型信息就會丟失。然而,生成GC時,需要操作數的類型信息,這種類型信息存儲在GC信息1059中。
圖10所示的m類文件1000的配置和圖11所示的m代碼屬性1050的配置僅僅是AOT編譯結果的存儲格式的示例,本領域技術人員能夠充分理解到本發明不被限制在這種存儲格式上。
為賦予m類文件1000以與Java類文件相同的特性,應允許在m類文件1000中以與Java類文件相同的方式來動態鏈接所有符號。由于Java類文件使用符號引用來指示Java字節碼的對象的域和方法,Java類文件就有可能動態鏈接所有符號。因此,盡管Java類文件被AOT編譯成目標機器碼,如果使用符號引用來指示目標機器碼的指令操作數中的對象的域或方法,就有可能實現Java的動態裝載/鏈接。
m類文件1000中包含的目標機器碼使用符號引用而不是符號地址來指示特殊的域或方法,而且可改變目標機器碼的指令格式,以便能把符號引用信息插入到目標機器碼的指令中。可使用JVM的符號地址來插入包含符號引用信息的指令,并且將其轉換成執行代碼。為了使JVM能夠識別和使用m類文件1000,要將各符號引用轉換成地址,并且在Java應用程序執行期間執行其他過程。然而,由于符號引用的轉換和其他過程比JIT編譯簡單,就有可能獲得比使用JIT編譯更優的機器碼,因此,Java平臺能夠表現出改進的性能。
根據本發明的AOT編譯器,將所有的符號引用1210編碼成如圖12A所示的32位格式,即符號引用1210的公共格式,并且將已編碼的符號引用1210包含進指令1200的操作數中。
如果具有x86格式的指令1200的操作數與符號地址對應,則操作數占用32字節,因此,編碼成32位格式的符號引用1210可被包含進指令1200的操作數中。如果將AOT編譯器用于其他處理器,可根據處理器的特殊指令改變符號引用1210的公共格式。
在符號引用1210的公共格式中,第一個2位段1211用作表示符號引用1210的各種類型的標志。接下來的14位段1212用作連接所有符號引用1210的鏈路,其范圍從當前符號引用的最后一個字節之后的第一個字節到當前符號引用之后的符號引用的第一個字節。剩下的16位段1213包含尋找當前符號引用所指示的符號所用的值。
代碼中所用的符號可被分成3種類型,即圖12B所示的常數池中包含的符號(常數池符號),圖12C所示的JVM內部區域中包含的符號(JVM內部符號),以及圖12D所示的數據塊中的特定位置的信息。
常數池是包含在類文件中的符號表,含有用于Java字節碼的所有符號的信息。Java字節碼使用常數池項索引作為指示對象的域或方法的操作數。如果操作數是常數池中的類、域或方法,AOT編譯器也使用含有常數池項索引1223的符號引用,而不是類、域或方法的地址。
符號類型可利用常數池項來確定。用在AOT編譯器中的符號類型是類、域和方法。每種符號類型都能以兩種方式使用,因此可以使用如圖13所示的6種符號引用。
圖12C示出所有對JVM內部符號的符號引用,基于JVM內部符號的類型對16位常數池索引1223進行編碼。圖14示出JVM內部符號指示符1233的配置。第一個2位段1410是指示JVM內部符號類型的標志,最后的8位1420含有JVM內部符號的索引。
由AOT編譯器產生的代碼中所用的各種JVM內部符號可以分為4種類型。第一種類型是Java應用程序執行期間的支持函數,在此把創建用于支持函數的表所獲得的索引預先存儲在圖14所示的符號索引1420中。第二種類型是預裝載的類,如“java.1ang.class”,或預裝載在JVM內部區域中的本機類,但是這種預裝載類不包含在已編譯的類文件的常數池中。這種預裝載類使用創建用于預裝載類的表所獲得的索引來指示。第三種類型是JVM中包含的局部變量。第四種類型用來存儲其他符號或指示m類連接器的線索。
在由指令指出數據塊的特定位置的情況下,通用指令將特定位置的地址當作操作數。然而,AOT編譯器把符號引用而不是地址當作操作數。圖12D示出這種符號引用。圖12D中的最后16位1243用來存儲數據塊從頭到尾的長度。
圖8是示出在根據本發明的Java平臺中執行方法的過程的流程圖800。
如果在步驟S810中調用了方法,就要確定該方法是否已被m類鏈接器鏈接,或者是第一次被鏈接和執行(步驟S820)。
如果以前已執行過該方法,則在步驟S860中執行以前生成的機器碼。
如果是第一次執行該方法,在步驟S830中提取關于方法的信息,并在步驟S840中確定該方法是否有m代碼屬性。如果該方法有m代碼屬性,則在步驟S850中由m類鏈接器執行符號解析,鏈接m代碼,并在步驟S860中執行機器碼。如果該方法沒有m代碼屬性,則在步驟S870中由解釋器解釋方法。
下面,結合圖15說明根據本發明的仿真結果。
圖15示出比較一般orp平臺和根據本發明的m-orp平臺的運行速度的對比結果。對orp平臺和m-orp平臺的測試在安裝Windows XP專業版作為操作系統的Pentium IV計算機上進行。圖15的表中所示的數值是通過將HelloWorld應用程序重復10次所得值平均而得。圖15中,FLT表示文件裝載時間,TT表示總時間,JT表示JIT編譯時間,MLT表示m鏈接時間。
從對比結果中可以看出,FLT占去超過60%的總執行時間。這一結果是由于個人計算機(PC)(即Pentium IV計算機)的運行速度的提高使得JT減少所致,而用于文件裝載的輸入/輸出盤需要的時間相對較長。然而,由于嵌入設備通常不使用盤,輸入/輸出盤所用的時間比率比圖15所示的數值低得多。換句話說,圖15的對比結果中,輸入/輸出盤所用的時間比率相當大,以至于JT和MLT之間的差異不能對Java平臺的性能產生重大影響。然而,在嵌入設備中,JT和MLT之間的差異卻能明顯影響Java平臺的性能。
在這項對比中,JT是MLT的4倍,由于JT和MLT之間的差異使Java平臺的性能提高了20%。考慮到這項對比是在PC上進行的,在嵌入設備中,由于排除了用于文件裝載的輸入/輸出盤所用的時間,Java平臺的性能可提高80%。
根據本發明,在Java虛擬機(JVM)中以高于先前技術中使用JIT編譯執行方法的速度來執行Java程序是可能的。由于JIT編譯是在執行Java應用程序時執行的,JIT編譯受可用的資源或時間所限制。因此,在執行JIT編譯時,不能夠充分執行運行優化。由于這個原因,JIT編譯器產生的代碼通常不是高質量的。然而,由于根據本發明的AOT編譯在庫類文件或應用程序類文件發布之前執行,充分執行運行優化和創建JIT編譯不可相比的高質量機器碼是可能的。在執行Java應用程序時由JVM對AOT編譯產生的機器碼進行后處理,以使其可用。然而,由于后處理比JIT編譯簡單,在Java應用程序執行期間產生的開銷很少。因此,當在目標機器中執行Java應用程序時,根據本發明的Java平臺有可能顯示出快捷的運行速度。
此外,根據本發明,AOT編譯對隨機存取存儲器(RAM)的需求也比JIT編譯少得多,這說明由于RAM有限而不能使用JIT編譯的嵌入設備可以采用本發明。特別是,盡管在嵌入設備中安裝了Java平臺,由于嵌入設備資源有限,例如存儲器有限,不能使用JIT編譯,而使用解釋方法。眾所周知,解釋方法以比JIT編譯低得多的速度執行Java應用程序。根據本發明的Java平臺表現出與JIT編譯相比有所改進的性能。如果由于資源有限而不能使用JIT編譯的嵌入設備,采用根據本發明的Java平臺,那么Java平臺能夠表現出改進的性能。
盡管結合示例性的實施例詳細地顯示和說明了本發明,但本領域的普通技術人員可以理解,在不脫離權利要求限定的本發明的精神和范圍的情況下,可以對其做出各種形式和細節的改變。
權利要求
1.一種Java執行設備,包括擴展類庫,包含預編譯標準類庫中包含的類文件所獲得的機器碼類文件;以及Java虛擬機(JVM),執行機器碼類文件或擴展類庫中包含的應用程序文件。
2.根據權利要求1的Java執行設備,其中機器碼的機器指令包含插入了符號引用信息的操作數。
3.根據權利要求2的Java執行設備,其中Java虛擬機(JVM)包含類鏈接器,所述類連接器將插入到機器指令操作數中的符號引用信息轉換成地址。
4.一種Java類文件的配置,其中Java類文件包括常數、域和方法,方法的方法信息包括由機器指令構成的代碼屬性,所述機器指令包含插入了符號引用信息的操作數。
5.根據權利要求4的Java類文件的配置,其中該方法信息進一步包括異常處理信息或用于碎片回收的信息。
6.根據權利要求4的Java類文件的配置,其中符號引用信息至少包括常數池符號信息、Java虛擬機(JVM)內部符號信息或數據塊位置信息之一。
7.一種執行Java應用程序的方法,所述方法包括(a)將標準類庫中包含的類文件預編譯成包含機器指令的擴展類庫;(b)擴展的類文件執行機器指令;以及(c)使用及時(JIT)編譯方法或解釋方法來執行Java應用程序文件。
8.根據權利要求7的方法,其中步驟(a)進一步包括將符號引用信息插入到機器指令的操作數中。
9.根據權利要求8的方法,其中步驟(b)進一步包括將插入到機器指令操作數中的符號引用信息轉換成地址。
10.一種Java文件的預編譯方法,所述方法包括將Java類文件或Java源文件轉換成機器指令,所述機器指令包含插入了符號引用信息的操作數。
11.根據權利要求10的方法,其中Java類文件包括標準Java類庫中包含的標準類文件。
12.一種Java虛擬機(JVM)中的執行方法,所述執行方法包括確定待執行方法的方法信息是否包含由機器指令構成的代碼屬性,所述機器指令包含插入了符號引用信息的操作數;以及如果待執行方法的方法信息包含由機器指令構成的代碼屬性,則將符號引用信息鏈接到地址,并執行機器指令。
13.根據權利要求12的方法,其中,如果待執行方法的方法信息不包含由機器指令構成的代碼屬性,所述執行方法進一步包括對方法進行及時(JIT)編譯或解釋。
全文摘要
本發明提供一種Java執行設備、Java類文件的配置、Java執行方法、Java文件的預編譯方法以及Java虛擬機(JVM)中的執行方法。Java執行設備包含擴展類庫和Java虛擬機(JVM),擴展類庫包含預編譯標準類庫中包含的類文件所獲得的機器碼類文件,Java虛擬機(JVM)執行機器碼類文件或擴展類庫中包含的應用程序文件。因此,在確保Java平臺的平臺獨立性和動態可擴展性的同時,提高Java平臺的性能是可能的。
文檔編號G06F9/455GK1504881SQ03148458
公開日2004年6月16日 申請日期2003年6月30日 優先權日2002年12月2日
發明者鄭云教 申請人:三星電子株式會社