專利名稱:用于改進(jìn)爪哇虛擬機(jī)性能的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于改進(jìn)Java(Sun微系統(tǒng)公司的注冊(cè)商標(biāo))虛擬機(jī)性能的方法和系統(tǒng),更具體地講,涉及一種用于通過將傳統(tǒng)的基于以一字節(jié)為單位的Java字節(jié)碼轉(zhuǎn)換成具有擴(kuò)展為傳統(tǒng)Java字節(jié)碼四倍的四字節(jié)大小的數(shù)據(jù)類型的代碼而提高Java程序的執(zhí)行速度的方法。
背景技術(shù):
Java(爪哇)編程語言自二十世紀(jì)九十年代中期出版以來已經(jīng)快速地激增,但是存在著它們的代碼與如C或C++的其它編程語言組成的代碼相比具有慢的運(yùn)算速度的缺點(diǎn)。為了克服這個(gè)缺點(diǎn),兩種應(yīng)用到傳統(tǒng)的基于解釋器的Java虛擬機(jī)的技術(shù)以前已經(jīng)被建議一種是動(dòng)態(tài)代碼產(chǎn)生技術(shù)如實(shí)時(shí)(Just-In-Time)編譯器,另一種是靜態(tài)代碼產(chǎn)生技術(shù)如預(yù)先(Ahead-Of-Time)編譯器。
Java平臺(tái)基本包括Java虛擬機(jī)和Java類。類文件由與類的數(shù)據(jù)結(jié)構(gòu)相關(guān)的信息組成,包括字段信息(field information)、方法信息等等。方法的執(zhí)行代碼由與硬件或操作系統(tǒng)無關(guān)的字節(jié)碼形成。
通過根據(jù)執(zhí)行引擎來分類傳統(tǒng)的Java虛擬機(jī),它能被區(qū)分為基于解釋器的Java虛擬機(jī)、基于實(shí)時(shí)(JIT)編譯器的虛擬機(jī)、使用基于解釋器和基于JIT編譯器的Java虛擬機(jī)的Java虛擬機(jī)、基于預(yù)先(AOT)編譯器的Java虛擬機(jī)等等。
基于解釋器的Java虛擬機(jī)解釋旨在逐一地執(zhí)行的方法的字節(jié)碼,由此執(zhí)行應(yīng)用。JIT編譯器通過編譯字節(jié)碼來獲得依賴于當(dāng)前Java平臺(tái)的機(jī)器語言代碼,然后執(zhí)行機(jī)器語言代碼以實(shí)施應(yīng)用。
圖1示出一種傳統(tǒng)的Java虛擬機(jī)的結(jié)構(gòu)。Java虛擬機(jī)100包括解釋器110、JIT或AOT編譯器120、用于裝載類的類裝載器130、用于結(jié)合并操作組件110、120和130的運(yùn)行時(shí)系統(tǒng)(run time system)140、將被執(zhí)行的應(yīng)用類150和以前已經(jīng)定義的系統(tǒng)類160。
圖2示出一種傳統(tǒng)的Java類文件的一般配置。
類文件包括類或接口定義,并且由定義在類中的各種屬性、字段信息、方法信息等組成。方法信息定義被稱為字節(jié)碼并規(guī)定在解釋器中執(zhí)行的字節(jié)流。字節(jié)碼從編譯包含Java源語言語句的文件(如具有“java”擴(kuò)展的文件)而獲得。
字節(jié)碼類似于用于執(zhí)行的程序模塊,因?yàn)樵谟?jì)算機(jī)內(nèi)部其被一次一個(gè)字節(jié)地執(zhí)行。但是字節(jié)碼的指令是被發(fā)送到邏輯和抽象的Java虛擬機(jī)的實(shí)際的指令。字節(jié)碼能夠由JIT編譯器再次編譯以和特定系統(tǒng)平臺(tái)兼容,包括它需要僅一次被一個(gè)字節(jié)解釋,因此加速了Java程序的執(zhí)行速度。作為增加解釋器中的Java程序的執(zhí)行速度的一種方法,有在字節(jié)碼內(nèi)的操作碼的位置上寫解釋器內(nèi)的操作碼處理程序地址的“線程解釋器”技術(shù)。
圖3示出在傳統(tǒng)Java虛擬機(jī)中被執(zhí)行的字節(jié)碼。
字節(jié)碼的指令由操作數(shù)和操作碼組成,兩者都有一字節(jié)的大小以區(qū)別所執(zhí)行的操作。一個(gè)操作碼可包括幾個(gè)操作數(shù)。操作碼和每個(gè)操作數(shù)都以一字節(jié)為單位被存儲(chǔ),從而它們被表示成連續(xù)字節(jié)以表示具有一個(gè)或多個(gè)字節(jié)大小的操作數(shù)。例如,16位值由兩個(gè)連續(xù)字節(jié)組成和32位值由四個(gè)連續(xù)字節(jié)組成。
在圖3中,第一行表示實(shí)際的字節(jié)碼的十六進(jìn)制值,第二行表示被分成操作碼和操作數(shù)的字節(jié)碼。
圖4示出在傳統(tǒng)Java虛擬機(jī)中裝載和執(zhí)行類的過程。
應(yīng)用類由Java虛擬機(jī)的類裝載器載入(S400),并經(jīng)歷鏈接過程(S410)和初始化過程(S420),然后相關(guān)信息被存儲(chǔ)在運(yùn)行時(shí)系統(tǒng)內(nèi)的數(shù)據(jù)結(jié)構(gòu)中,并由如解釋器或JIT編譯器的執(zhí)行引擎來執(zhí)行方法(S430)。
圖5是顯示在傳統(tǒng)Java解釋器中執(zhí)行每一操作碼的示例性的操作的流程圖。
在典型的解釋器中,字節(jié)碼以圖5所示的方式被執(zhí)行。當(dāng)在解釋器中調(diào)用方法時(shí)(S500),指示該方法的字節(jié)碼的程序計(jì)數(shù)器遞增(S510),然后確定該方法的字節(jié)碼是否是最后的字節(jié)碼(S520)。如果該方法的字節(jié)碼不是最后的字節(jié)碼,那么取出一字節(jié)的操作碼(S530)。隨后,控制使用程序中的切換語句來轉(zhuǎn)向?qū)?yīng)于所取的一字節(jié)操作碼的處理程序,從而,執(zhí)行處理程序(S540和S550)。這個(gè)過程隨著字節(jié)碼的大小被多次重復(fù),然后用于該方法的解釋過程終止(S560)。
圖5所示的過程能夠用下面的偽代碼來表示Loop{Op=*pc++;switch(Op){case op_1//op_1的執(zhí)行break;case op_2//op_2的執(zhí)行break;case op_3//op_3’的執(zhí)行break;…}}在對(duì)各個(gè)操作碼的處理程序中,如果操作碼所需的操作數(shù)的數(shù)據(jù)大小大于1字節(jié),那么操作數(shù)的值就以連續(xù)字節(jié)被儲(chǔ)存。因此,按每一位通過“或”運(yùn)算符和移位運(yùn)算符,連續(xù)字節(jié)被重構(gòu)成一有效值。例如,在使用“小頭(LittleEndian)”格式的CPU中,如果某一操作碼A所需的操作數(shù)是在連續(xù)的字節(jié)字節(jié)1、字節(jié)2、字節(jié)3和字節(jié)4中,那么,字節(jié)4表示被邏輯地指示的32位值的第一位到第八位,字節(jié)3表示被邏輯地指示的32位值的第九位到第十六位,字節(jié)2表示被邏輯地指示的32位值的第十七位到第二十四位,字節(jié)1表示被邏輯地指示的32位值的第二十五位到第三十二位。
因此,操作碼A實(shí)際所需的32位值能夠通過像“[(byte1<<24)|(byte1<<16)|(byte1<<8)|byte4]”的操作而獲得。在現(xiàn)有的Java虛擬機(jī)中,結(jié)合這樣的操作數(shù)的過程在方法被執(zhí)行的任何時(shí)候發(fā)生。
因?yàn)楝F(xiàn)在許多CPU具有32位體系結(jié)構(gòu)并使用內(nèi)置的32位寄存器,所以取出32位數(shù)據(jù)顯示出比取出8位數(shù)據(jù)更好的性能。
此外,在傳統(tǒng)的Java字節(jié)碼中,因?yàn)椴僮鞔a和操作數(shù)以一字節(jié)為單位被存儲(chǔ),所以操作碼的位大小被限制到8位,這能表示最大僅256個(gè)不同的位配置。因此,一旦預(yù)定的操作碼被排斥,那么剩余的能夠?qū)S糜谛碌目啥x的操作碼的位配置的數(shù)量受到相當(dāng)大地限制。因?yàn)檫@個(gè)原因,在其中需要許多可再定義的操作碼的動(dòng)態(tài)代碼產(chǎn)生技術(shù)上存在許多限制。
對(duì)于操作數(shù)來講,當(dāng)操作數(shù)的數(shù)據(jù)大小大于1字節(jié)時(shí),那么操作數(shù)將以連續(xù)字節(jié)被排列,并且,連續(xù)字節(jié)按每一位通過“或”運(yùn)算符和移位運(yùn)算符在執(zhí)行方法的任何時(shí)候?qū)⒈恢貥?gòu)。當(dāng)Java程序被執(zhí)行時(shí),這個(gè)過程運(yùn)行可能以大量的系統(tǒng)開銷來運(yùn)行。因此,需要通過克服這些限制來改進(jìn)Java虛擬機(jī)的性能。
發(fā)明內(nèi)容
因此,本發(fā)明的目的直接在于通過提供一種方法來解決上述在現(xiàn)有技術(shù)所發(fā)生的問題,該方法通過將傳統(tǒng)的以一字節(jié)為單位的Java字節(jié)碼轉(zhuǎn)換成具有被擴(kuò)展為傳統(tǒng)的Java字節(jié)碼四倍的4字節(jié)大小的數(shù)據(jù)類型的代碼(以下稱作為“中間代碼”的代碼),而提高Java虛擬機(jī)的執(zhí)行速度。然而,本發(fā)明的實(shí)施例沒有被要求解決這里所描述的任何問題。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種用于改進(jìn)Java虛擬機(jī)的性能的方法。該方法包括第一步驟,抽取組成Java類的方法的字節(jié)碼;第二步驟,合并抽取的字節(jié)碼、產(chǎn)生具有預(yù)定字節(jié)大小的第二代碼,并且將第二代碼分配給預(yù)定類型的數(shù)據(jù)結(jié)構(gòu);和第三步驟,由組成Java虛擬機(jī)的執(zhí)行引擎執(zhí)行第二代碼。在這種情況下,最好但并非必要的是字節(jié)大小取決于配備有Java虛擬機(jī)的中央處理單元的數(shù)據(jù)處理能力。
最好但并非必要的是數(shù)據(jù)結(jié)構(gòu)是整數(shù)類型之一。
最好但并非必要的是如果所抽取的字節(jié)碼的至少兩個(gè)字節(jié)被合并以表示邏輯值,那么第二步驟是這樣一個(gè)步驟,其用于合并該至少兩個(gè)字節(jié)、產(chǎn)生具有預(yù)定字節(jié)大小的第二代碼,并且將第二代碼分配給預(yù)定類型的數(shù)據(jù)結(jié)構(gòu)。
最好但并非必要的是當(dāng)所抽取的字節(jié)碼是使用寬的操作數(shù)的操作碼時(shí),第二步驟是這樣一個(gè)步驟,其用于將操作碼轉(zhuǎn)換成不使用寬的操作數(shù)的操作碼、產(chǎn)生具有已轉(zhuǎn)換的操作碼的預(yù)定字節(jié)大小的第二代碼,并且將第二代碼分配給數(shù)據(jù)結(jié)構(gòu)。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種配備著有Java虛擬機(jī)的系統(tǒng),其中,Java虛擬機(jī)抽取組成Java類的方法的字節(jié)碼,合并所抽取的字節(jié)碼,產(chǎn)生具有預(yù)定字節(jié)大小的第二代碼,將第二代碼分配給預(yù)定類型的數(shù)據(jù)結(jié)構(gòu),并且允許由組成Java虛擬機(jī)的執(zhí)行引擎來執(zhí)行第二代碼。這種情況下,數(shù)據(jù)結(jié)構(gòu)是整數(shù)類型之一。
最好但并非必要的是字節(jié)大小取決于配備有Java虛擬機(jī)的中央處理單元的數(shù)據(jù)處理能力。
最好但并非必要的是當(dāng)所抽取字節(jié)碼的至少兩個(gè)字節(jié)被合并以表示邏輯值時(shí),系統(tǒng)合并該至少兩個(gè)字節(jié)并產(chǎn)生具有預(yù)定字節(jié)大小的第二代碼。
最好但并非必要的是當(dāng)所抽取的字節(jié)碼是使用寬的操作數(shù)的操作碼時(shí),系統(tǒng)將使用寬的操作數(shù)的操作碼轉(zhuǎn)換成不使用寬的操作數(shù)的操作碼,并產(chǎn)生具有已轉(zhuǎn)換的操作碼的預(yù)定字節(jié)大小的第二代碼。
通過結(jié)合附圖,從下面詳細(xì)的描述中,本發(fā)明的上述和其他示例性目的、特點(diǎn)和優(yōu)點(diǎn)將會(huì)變得更加清楚,其中圖1示出傳統(tǒng)的Java虛擬機(jī)的結(jié)構(gòu);圖2示出傳統(tǒng)的Java類文件的一般結(jié)構(gòu);圖3示出在傳統(tǒng)的Java虛擬機(jī)中被執(zhí)行的字節(jié)碼;圖4示出在傳統(tǒng)的Java虛擬機(jī)中類裝載和執(zhí)行的過程;圖5是顯示在傳統(tǒng)的Java解釋器中執(zhí)行每個(gè)操作碼的示例性操作的流程圖;圖6是顯示根據(jù)本發(fā)明示例性的實(shí)施例的包括轉(zhuǎn)換器的Java虛擬機(jī)的結(jié)構(gòu)的方框圖;圖7示出在根據(jù)本發(fā)明示例性的實(shí)施例的Java虛擬機(jī)中裝載和執(zhí)行類的過程;圖8是顯示根據(jù)本發(fā)明示例性的實(shí)施例的轉(zhuǎn)換字節(jié)碼的過程的一個(gè)示例的流程圖;和圖9示出在根據(jù)本發(fā)明示例性的實(shí)施例的Java虛擬機(jī)中被執(zhí)行的字節(jié)碼。
具體實(shí)施例方式
以下,將參照附圖根據(jù)本發(fā)明的各種示例性、非限制性的實(shí)施例來進(jìn)一步詳細(xì)描述關(guān)于一種用于改進(jìn)Java虛擬機(jī)性能的方法和系統(tǒng)。
圖6是顯示根據(jù)本發(fā)明示例性的實(shí)施例的包括轉(zhuǎn)換器的Java虛擬機(jī)的結(jié)構(gòu)的方框圖;圖6示出根據(jù)本發(fā)明示例性的實(shí)施例的包括在傳統(tǒng)的Java虛擬機(jī)沒有被發(fā)現(xiàn)的轉(zhuǎn)換器630的Java虛擬機(jī)的結(jié)構(gòu),其中轉(zhuǎn)換器630通過排列字節(jié)碼的四個(gè)字節(jié)將1字節(jié)的字節(jié)碼轉(zhuǎn)換成4字節(jié)的字節(jié)碼。換句話說,Java虛擬機(jī)600除了傳統(tǒng)的Java虛擬機(jī)被提供的解釋器610、JIT編譯器620、類裝載器640、運(yùn)行時(shí)650、應(yīng)用類660和系統(tǒng)類670外,還被提供轉(zhuǎn)換器630。轉(zhuǎn)換器630能夠以線程類型來被實(shí)現(xiàn)。
圖7示出在根據(jù)本發(fā)明示例性的實(shí)施例的Java虛擬機(jī)中裝載和執(zhí)行類的過程。
在Java虛擬機(jī)600中由類裝載器640裝載一新的類(S700),然后調(diào)用轉(zhuǎn)換器630。隨后,關(guān)于在被裝載的類中聲明的每一方法,轉(zhuǎn)換器630通過排列四個(gè)1字節(jié)的字節(jié)碼將字節(jié)碼轉(zhuǎn)換成中間代碼(int-code)(S710)。
在步驟S710之后,并且類似于在圖4的傳統(tǒng)方法中所示的步驟,執(zhí)行鏈接過程(S720)和初始化過程(S730),然后由執(zhí)行引擎執(zhí)行每一方法(S740)。
用程序代碼表示步驟S710的過程如下Int[]byte-To-int(char*byte-code,int size_of_byte-code){int*int-code;int-code=(int*)malloc(4*size_of_byte-code)//分配4倍于當(dāng)前字節(jié)碼大小的存儲(chǔ)器Loop{char*pc;int int-codePC=0;pc=byte-code;Op=*pc++;switch(OP){case opcode_1//用于opcode_1的中間代碼轉(zhuǎn)換方案pc++
int-codePC++;break;case opcode_2;//用于opcode_2的中間代碼轉(zhuǎn)換方案pc++;int-codePC++;break;}}}以下,將解釋程序代碼。
當(dāng)在Java虛擬機(jī)上裝載新類時(shí),對(duì)在類中聲明的每一方法,調(diào)用轉(zhuǎn)換器630。在這種情況下,轉(zhuǎn)換器630接收方法字節(jié)碼和該方法字節(jié)碼的大小作為輸入?yún)?shù)。
在轉(zhuǎn)換器630中,至少為該方法大小的四倍的存儲(chǔ)器被分配,并且分配的存儲(chǔ)器使用是32位整數(shù)指針的中間代碼指示。中間代碼隨后是大的循環(huán),其繼續(xù)循環(huán)直到?jīng)]有字節(jié)從字節(jié)碼中取出。該循環(huán)具有一個(gè)在其中用于轉(zhuǎn)換每一操作碼的例行程序被定義的切換語句。
圖8是顯示根據(jù)本發(fā)明示例性的實(shí)施例的轉(zhuǎn)換字節(jié)碼的示例性過程的流程圖。
當(dāng)類裝載器裝載新類時(shí),轉(zhuǎn)換字節(jié)碼的過程開始(S800)。首先,檢查由當(dāng)前的程序計(jì)數(shù)器指示的操作碼是否具有寬的索引作為操作數(shù)(S810)。在操作碼不需要寬的操作數(shù)的情況下,操作碼被存儲(chǔ)在中間代碼中(S830)。
在操作碼需要寬的操作數(shù)的情況下,操作碼在Java虛擬機(jī)版本2上起著相同的作用,但是另一不需要寬的操作數(shù)的操作碼被發(fā)現(xiàn),然后被發(fā)現(xiàn)的操作碼作為代替被存儲(chǔ)在該中間代碼中(S810和S820)。
例如,“jsr_w”是被定義在Java虛擬機(jī)版本2中的指令之一,并且和“jsr”指令起著相同的作用。此時(shí),在“jsr_w”指令中,32位寬的索引被分配給操作數(shù)(作為四個(gè)連續(xù)字節(jié)),而在“jsr”指令中,16位索引被分配給操作數(shù)(作為兩個(gè)連續(xù)字節(jié))。
換句話說,“jsr”指令而不是“jsr_w”指令被存儲(chǔ)在中間代碼陣列中。因此,帶有寬的操作數(shù)的操作碼被去除,從而,當(dāng)產(chǎn)生動(dòng)態(tài)代碼時(shí),這些操作碼能夠被重新定義以使可用的。以這種方式,當(dāng)操作碼被提供32位碼元(element)時(shí),在32位碼元中除了操作碼的大小(即8位)外24位保持為空。此時(shí),24位的空白空間能夠被用作存儲(chǔ)字段,對(duì)于該存儲(chǔ)字段JIT技術(shù)被應(yīng)用于操作碼和隨后的幾個(gè)字節(jié)碼,并且所得的代碼塊地址等和定義指示JIT技術(shù)被應(yīng)用到其的新操作碼的一字節(jié)的剩余部分一起被插入到空白空間。
在完成步驟S830后,指示新字節(jié)碼的程序計(jì)數(shù)器和指示中間代碼的中間代碼PC都遞增。當(dāng)操作碼帶有操作數(shù)時(shí),操作數(shù)必須被插入到中間代碼中。在這種情況下,必須檢查操作數(shù)是否大于一字節(jié)(S840和S850)。換句話說,在操作數(shù)由連續(xù)字節(jié)組成的情況下,在將操作數(shù)插入到中間代碼中之前,操作數(shù)依照當(dāng)前由按位操作的“或”運(yùn)算符和移位運(yùn)算符使用的CPU的頭格式(Endian format)被合并之后被存儲(chǔ)在一個(gè)中間代碼中(S860和S870)。當(dāng)與一個(gè)或多個(gè)字節(jié)合并的操作數(shù)的大小不大于四字節(jié)時(shí),有可能將操作數(shù)存儲(chǔ)在中間代碼的一個(gè)碼元中。因?yàn)閳?zhí)行該操作的操作過程在執(zhí)行方法前僅僅實(shí)施一次上述的操作數(shù)合并,所以它能夠獲得比傳統(tǒng)的解釋器更好的性能。如果連續(xù)字節(jié)的數(shù)目是n,那么合并的結(jié)果被提供一個(gè)中間代碼,然后另外n-1個(gè)中間代碼被設(shè)置空白空間。
圖9示出在根據(jù)本發(fā)明示例性的實(shí)施例的Java虛擬機(jī)中被執(zhí)行的字節(jié)碼。
例如,原有的字節(jié)碼“goto”通過中間代碼轉(zhuǎn)換算法被轉(zhuǎn)換成“int-code
”值。插入“nop”(即非運(yùn)算指令)的原因是提高當(dāng)解釋器在中間代碼方案中被轉(zhuǎn)換時(shí)的方便,并且插入值可以根據(jù)實(shí)施方案而不同。
根據(jù)本發(fā)明的實(shí)施例,通過擴(kuò)展字節(jié)碼和在解釋器或JIT編譯器應(yīng)用于其的Java虛擬機(jī)中將它轉(zhuǎn)換成中間代碼或32位陣列,本發(fā)明具有改進(jìn)配備32位CPU的硬件的執(zhí)行速度的效果,和具有使用陣列的空白空間容易地存儲(chǔ)和監(jiān)視與各個(gè)操作碼相聯(lián)系的附加信息的效果。此外,因?yàn)楸景l(fā)明不再使用用于處理寬的操作數(shù)的寬的操作碼,所以本發(fā)明具有這些不用的操作碼能夠被再定義為新的被用戶定義的操作碼的優(yōu)點(diǎn)。
從前述能夠看出,本領(lǐng)域的技術(shù)人員應(yīng)該理解,因?yàn)樵诓幻撾x其中的精神和范圍的情況下可以對(duì)本發(fā)明做各種改變、變化和修改,所以本發(fā)明不限于上述的具體實(shí)施例或附圖。
權(quán)利要求
1.一種用于改進(jìn)Java虛擬機(jī)性能的方法,該方法包括抽取Java類的方法的字節(jié)碼;合并所抽取的字節(jié)碼,產(chǎn)生具有預(yù)定字節(jié)大小的第二代碼,并且將第二代碼分配給預(yù)定類型的數(shù)據(jù)結(jié)構(gòu);和由Java虛擬機(jī)的執(zhí)行引擎執(zhí)行第二代碼。
2.根據(jù)權(quán)利要求1所述的方法,其中,字節(jié)大小取決于配備有Java虛擬機(jī)的中央處理單元(CPU)的數(shù)據(jù)處理能力。
3.根據(jù)權(quán)利要求1所述的方法,其中,數(shù)據(jù)結(jié)構(gòu)是整數(shù)類型的數(shù)據(jù)結(jié)構(gòu)。
4.根據(jù)權(quán)利要求1所述的方法,其中,當(dāng)所抽取的字節(jié)碼的至少兩個(gè)字節(jié)被合并以表示邏輯值時(shí),合并、產(chǎn)生和分配的步驟分別包括合并該至少兩個(gè)字節(jié),產(chǎn)生具有預(yù)定字節(jié)大小的第二代碼,和將第二代碼分配給數(shù)據(jù)結(jié)構(gòu)。
5.根據(jù)權(quán)利要求1所述的方法,其中,當(dāng)所抽取的字節(jié)碼是使用寬的操作數(shù)的操作碼時(shí),合并、產(chǎn)生和分配的步驟分別包括將使用寬的操作數(shù)的操作碼轉(zhuǎn)換成不使用寬的操作數(shù)的操作碼,產(chǎn)生包括已轉(zhuǎn)換的操作碼的具有預(yù)定字節(jié)大小的第二代碼,和將第二代碼分配給數(shù)據(jù)結(jié)構(gòu)。
6.一種包括Java虛擬機(jī)的系統(tǒng),其中,Java虛擬機(jī)抽取Java類的方法的字節(jié)碼,合并所抽取的字節(jié)碼,產(chǎn)生具有預(yù)定字節(jié)大小的第二代碼,將第二代碼分配給預(yù)定類型的數(shù)據(jù)結(jié)構(gòu),并且允許由Java虛擬機(jī)的執(zhí)行引擎來執(zhí)行第二代碼。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其中,數(shù)據(jù)結(jié)構(gòu)是整數(shù)類型之一。
8.根據(jù)權(quán)利要求6所述的系統(tǒng),其中,字節(jié)大小取決于配備有Java虛擬機(jī)的中央處理單元(CPU)的數(shù)據(jù)處理能力。
9.根據(jù)權(quán)利要求6所述的系統(tǒng),其中,當(dāng)所抽取的字節(jié)碼的至少兩個(gè)字節(jié)被合并以表示邏輯值時(shí),該系統(tǒng)合并該至少兩個(gè)字節(jié)以產(chǎn)生具有預(yù)定字節(jié)大小的第二代碼。
10.根據(jù)權(quán)利要求6所述的系統(tǒng),其中,當(dāng)所抽取的字節(jié)碼是使用寬的操作數(shù)的操作碼時(shí),該系統(tǒng)將使用寬的操作數(shù)的操作碼轉(zhuǎn)換成不使用寬的操作數(shù)的操作碼,并且產(chǎn)生包括已轉(zhuǎn)換的操作碼的具有預(yù)定字節(jié)大小的第二代碼。
全文摘要
一種用于改進(jìn)Java虛擬機(jī)性能的方法和系統(tǒng),包括抽取組成Java類的方法的字節(jié)碼;合并所抽取的字節(jié)碼以產(chǎn)成具有預(yù)定字節(jié)大小的第二代碼,并且將第二代碼分配給預(yù)定類型的數(shù)據(jù)結(jié)構(gòu);和由在Java虛擬機(jī)中被使用的執(zhí)行引擎來執(zhí)行第二代碼。
文檔編號(hào)G06F9/44GK1641587SQ20051000207
公開日2005年7月20日 申請(qǐng)日期2005年1月14日 優(yōu)先權(quán)日2004年1月17日
發(fā)明者權(quán)浩凡, 羅曼奧弗斯基·亞歷克塞, 崔正必, 趙雄石 申請(qǐng)人:三星電子株式會(huì)社