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

中間代碼預(yù)處理、執(zhí)行裝置及執(zhí)行系統(tǒng)及計(jì)算機(jī)程序產(chǎn)品的制作方法

文檔序號(hào):6597841閱讀:128來(lái)源:國(guó)知局
專利名稱:中間代碼預(yù)處理、執(zhí)行裝置及執(zhí)行系統(tǒng)及計(jì)算機(jī)程序產(chǎn)品的制作方法
對(duì)相關(guān)申請(qǐng)的參照說(shuō)明本發(fā)明根據(jù)并要求2001年10月3 1提交的現(xiàn)有日本專利申請(qǐng)?zhí)?001-334823與2001年10月31日提交的現(xiàn)有日本專利申請(qǐng)?zhí)?001-334825的優(yōu)先權(quán),特此將兩者全部?jī)?nèi)容引入在此作為參考。
根據(jù)上述方法,由于單一程序代碼可以供給各種平臺(tái)并被執(zhí)行,所以不再需要準(zhǔn)備只能在各自平臺(tái)上執(zhí)行的目的代碼。結(jié)果,不僅該程序的分配可以簡(jiǎn)化,而且也提高了軟件開發(fā)的效率。所以,已經(jīng)在各種計(jì)算機(jī)平臺(tái)上構(gòu)造了虛擬機(jī)。而且近年來(lái),也已經(jīng)開始在各種內(nèi)裝一個(gè)處理器的電子設(shè)備(下文將稱之為一個(gè)嵌入式設(shè)備)中構(gòu)造基于微處理器的虛擬機(jī)。
這里,一個(gè)已知的虛擬機(jī)是某種解釋器類型,它以軟件的形式在該平臺(tái)上構(gòu)造,并順序解釋及執(zhí)行某個(gè)類文件中所包括的字節(jié)代碼命令。該解釋器類型的虛擬機(jī)需要一個(gè)從該類文件中逐個(gè)取出字節(jié)代碼指令并解釋它們的內(nèi)容的處理過(guò)程。在現(xiàn)有技術(shù)中這一過(guò)程成為額外消耗,所以不能獲得優(yōu)良的性能。
因而,已經(jīng)提出了一個(gè)JIT編譯器(即時(shí)編譯器)系統(tǒng)、一個(gè)AOT編譯器(提前編譯器)或類似系統(tǒng),它們能將該類文件編譯為每類硬件固有的本機(jī)代碼并對(duì)其執(zhí)行以便改進(jìn)性能。而且,一直也在嘗試硬件形式的某種虛擬機(jī)結(jié)構(gòu),譬如專門設(shè)計(jì)以便能夠直接執(zhí)行字節(jié)代碼指令的某種JavaTM芯片。
在上述的JIT或AOT編譯器系統(tǒng)中,由于執(zhí)行的是該處理器的本機(jī)代碼,所以如果只注意指令執(zhí)行速度,那么它優(yōu)于該解釋器系統(tǒng)。然而,該編譯器系統(tǒng)需要一個(gè)供該編譯操作本身的工作區(qū)域,或者需要一個(gè)長(zhǎng)度為該類文件4至10倍的儲(chǔ)存該本機(jī)代碼的區(qū)域,所以十分不利的是需要比該解釋器系統(tǒng)更大的存儲(chǔ)器數(shù)量。這一問(wèn)題在對(duì)硬件資源限制比一個(gè)常規(guī)計(jì)算機(jī)更為嚴(yán)格的嵌入式設(shè)備中特別突出。而且,如果在指導(dǎo)執(zhí)行這個(gè)類文件后開始編譯,那么該編譯操作就成為額外消耗,也就不能得到足夠好的性能。
此外,按照上述的JavaTM芯片,盡管該類文件可以不進(jìn)行編譯以高性能執(zhí)行,但在開發(fā)這一專用芯片時(shí)需要大量的開發(fā)成本,所以芯片本身的成本增加也就不可避免。另外考慮到,根據(jù)技術(shù)的進(jìn)步或市場(chǎng)需要,總要在語(yǔ)言規(guī)范中適當(dāng)更新版本或消除錯(cuò)誤,所以構(gòu)造硬件形式的虛擬機(jī)也未必是優(yōu)選的方法。特別是在該嵌入式設(shè)備的虛擬機(jī)中,因?yàn)榧葟?qiáng)烈要求降低成本又要在一個(gè)短周期內(nèi)對(duì)規(guī)范進(jìn)行版本更新,所以采用JavaTM芯片并不現(xiàn)實(shí)。
如上所述,很難將編譯器系統(tǒng)或JavaTM芯片這樣的虛擬機(jī)應(yīng)用于某個(gè)嵌入式設(shè)備或類似設(shè)備。所以,一直要求一種能在應(yīng)用于某個(gè)嵌入式設(shè)備的假設(shè)下能在執(zhí)行該中間代碼過(guò)程中改進(jìn)性能的技術(shù)。
為了達(dá)到這一目的,根據(jù)本發(fā)明的一個(gè)第一方面,提供了一個(gè)中間代碼預(yù)處理裝置,它對(duì)某種預(yù)定語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼進(jìn)行預(yù)處理,其特征為它包括一個(gè)儲(chǔ)存中間代碼的存儲(chǔ)器部分;以及一個(gè)預(yù)處理部分,該預(yù)處理部分將儲(chǔ)存在該存儲(chǔ)器部分內(nèi)的中間代碼中所包括的某個(gè)特定指令模式替換為一個(gè)預(yù)先與該特定指令模式關(guān)聯(lián)的替代指令。
此外,根據(jù)本發(fā)明的一個(gè)第二方面,提供了一個(gè)中間代碼執(zhí)行裝置,它執(zhí)行對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼進(jìn)行編譯后所得的中間代碼,其特征為它包括一個(gè)儲(chǔ)存中間代碼的存儲(chǔ)器部分;以及一個(gè)處理部分,該處理部分執(zhí)行如下處理a)將由儲(chǔ)存在該存儲(chǔ)器部分內(nèi)的中間代碼中所包括的多個(gè)指令構(gòu)成的一個(gè)特定指令模式替換為一個(gè)預(yù)先與該特定指令模式關(guān)聯(lián)的替代指令;和b)將該替代指令解釋為實(shí)際相當(dāng)于該特定指令模式的處理,并在順序解釋與執(zhí)行該特定指令模式已經(jīng)用該替代指令替換后的中間代碼時(shí)執(zhí)行該替代指令。
而且,根據(jù)本發(fā)明的一個(gè)第三方面,提供一種計(jì)算機(jī)程序產(chǎn)品,它對(duì)某種預(yù)定程序語(yǔ)言生成的一個(gè)源代碼經(jīng)編譯后所得的中間代碼進(jìn)行預(yù)處理,其特征為它包括一個(gè)用來(lái)將該中間代碼中所包括的一個(gè)特定指令模式替換為一個(gè)預(yù)先與該特定指令模式關(guān)聯(lián)的替代指令的處理部分。
再者,根據(jù)本發(fā)明的一個(gè)第四方面,提供了一種計(jì)算機(jī)程序產(chǎn)品,它執(zhí)行某種預(yù)定程序語(yǔ)言生成的一個(gè)源代碼經(jīng)編譯后所得的中間代碼,其特征為它包括一個(gè)執(zhí)行如下處理的處理部分a)將由該中間代碼中所包括的多個(gè)指令構(gòu)成的一個(gè)特定指令模式替換為一個(gè)預(yù)先與該特定指令模式關(guān)聯(lián)的替代指令;和b)將該替代指令解釋為實(shí)際相當(dāng)于該特定指令模式的低冗余處理,并在解釋與執(zhí)行該特定指令模式已經(jīng)用該替代指令替代的中間代碼時(shí)執(zhí)行該替代指令。
另外,根據(jù)本發(fā)明的一個(gè)第五方面,提供了一個(gè)中間代碼執(zhí)行裝置,它執(zhí)行編譯某種預(yù)定程序語(yǔ)言生成的源代碼后所得的中間代碼,其特征為它包括多個(gè)執(zhí)行該中間代碼的中間代碼執(zhí)行部分;一個(gè)存儲(chǔ)器部分,它既儲(chǔ)存中間代碼,也儲(chǔ)存該中間代碼中所包括的一個(gè)指令與每個(gè)中間代碼執(zhí)行部分能有效執(zhí)行該指令的適合程度之間的對(duì)應(yīng)關(guān)系;以及一個(gè)中間代碼解釋部分,該中間代碼解釋部分執(zhí)行如下過(guò)程a)識(shí)別儲(chǔ)存在該存儲(chǔ)器部分內(nèi)的中間代碼中所包括的各指令;b)根據(jù)這些識(shí)別的指令與該對(duì)應(yīng)關(guān)系從這些中間代碼執(zhí)行部分中確定一個(gè)合適的能有效執(zhí)行該中間代碼的中間代碼執(zhí)行部分;以及c)標(biāo)明該中間代碼與該合適的中間代碼執(zhí)行部分之間的某種關(guān)系。
再有,根據(jù)本發(fā)明的一個(gè)第六方面,提供了一個(gè)中間代碼執(zhí)行裝置,它執(zhí)行某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼,其特征為它包括一個(gè)專用中間代碼執(zhí)行部分;一個(gè)通用中間代碼執(zhí)行部分;一個(gè)其中儲(chǔ)存中間代碼的存儲(chǔ)器部分;以及一個(gè)中間代碼分析部分,該中間代碼分析部分執(zhí)行如下處理a)分析儲(chǔ)存在該存儲(chǔ)器部分內(nèi)的中間代碼并判斷一個(gè)不能由該專用中間代碼執(zhí)行部分執(zhí)行的指令是否包含在該中間代碼所包括的指令之內(nèi);b)如果該不能執(zhí)行的指令不包含在該中間代碼之中則標(biāo)明該中間代碼應(yīng)當(dāng)由該專用中間代碼執(zhí)行部分執(zhí)行,如果該不能執(zhí)行的指令包含在該中間代碼之中則標(biāo)明該中間代碼應(yīng)當(dāng)由該通用中間代碼執(zhí)行部分執(zhí)行。
此外,根據(jù)本發(fā)明的一個(gè)第七方面,提供了一個(gè)中間代碼執(zhí)行系統(tǒng),它執(zhí)行某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼,其特征為它包括一個(gè)其中儲(chǔ)存中間代碼的存儲(chǔ)器部分;一個(gè)預(yù)處理部分,它對(duì)儲(chǔ)存在該存儲(chǔ)器部分內(nèi)的中間代碼進(jìn)行預(yù)處理,即將該中間代碼中所包括的一個(gè)特定指令模式替換為一個(gè)預(yù)先已與該特定指令模式關(guān)聯(lián)的替代指令;一個(gè)不能解釋并執(zhí)行該替代指令的第一解釋器;一個(gè)能夠?qū)⒃撎娲噶罱忉尀橄喈?dāng)于該指令模式在替換前的內(nèi)容并執(zhí)行該替代指令的第二解釋器;以及一個(gè)中間代碼分析部分,它分析被該預(yù)處理部分處理后的中間代碼,判斷該替代指令是否包括在該中間代碼之中,若該替代指令被包括則標(biāo)明該中間代碼應(yīng)當(dāng)由該第一解釋器執(zhí)行,若該替代指令未被包括則標(biāo)明該中間代碼應(yīng)當(dāng)由該第二解釋器執(zhí)行。
而且,根據(jù)本發(fā)明的一個(gè)第八方面,提供了一個(gè)中間代碼執(zhí)行系統(tǒng),它執(zhí)行某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼,其特征為它包括一個(gè)具有某個(gè)第一解釋器的第一子系統(tǒng),該第一解釋器能解釋并執(zhí)行編譯過(guò)程中生成的所有指令;一個(gè)第二子系統(tǒng),它包含一個(gè)能進(jìn)行預(yù)處理,即將由該中間代碼所包括的多個(gè)指令構(gòu)成的一個(gè)指令模式替換為一個(gè)替代指令的預(yù)處理部分,還包含一個(gè)將該替代指令解釋為相當(dāng)于該中間代碼在替換前的內(nèi)容并執(zhí)行該替代指令的第二解釋器;以及一個(gè)選擇部分,它根據(jù)需要執(zhí)行的中間代碼或者選擇由該第一子系統(tǒng)的第一解釋器來(lái)執(zhí)行該中間代碼,或者選擇由該預(yù)處理部分對(duì)該中間代碼進(jìn)行預(yù)處理,然后由該第二子系統(tǒng)的第二解釋器來(lái)執(zhí)行該經(jīng)過(guò)預(yù)處理后的中間代碼。
再者,根據(jù)本發(fā)明的一個(gè)第九方面,提供了一個(gè)中間代碼執(zhí)行系統(tǒng),它執(zhí)行某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼,其特征為它包括一個(gè)第一子系統(tǒng),它包含一個(gè)能進(jìn)行預(yù)處理,即將由該中間代碼中所包括的多個(gè)指令構(gòu)成的一個(gè)第一指令模式替換為一個(gè)第一替代指令的預(yù)處理部分,還包含一個(gè)能夠?qū)⒃摰谝惶娲噶罱忉尀橄喈?dāng)于該第一指令模式的內(nèi)容并執(zhí)行該第一替代指令的第一解釋器;一個(gè)第二子系統(tǒng),它包含一個(gè)能進(jìn)行預(yù)處理,即將該中間代碼中所包括的一個(gè)第二指令模式替換為一個(gè)第二替代指令的預(yù)處理部分,還包含一個(gè)能將該第二替代指令解釋為相當(dāng)于該第二指令模式的內(nèi)容并執(zhí)行該第二替代指令的第二解釋器;以及一個(gè)選擇部分,它根據(jù)需要執(zhí)行的中間代碼或者選擇在該第一子系統(tǒng)中由該第一預(yù)處理部分對(duì)該中間代碼進(jìn)行預(yù)處理并由該第一解釋器執(zhí)行該中間代碼,或者選擇在該第二子系統(tǒng)中由該第二預(yù)處理部分對(duì)該中間代碼進(jìn)行預(yù)處理并由該第二解釋器執(zhí)行該已經(jīng)預(yù)處理后的中間代碼。
本發(fā)明的其他目的與優(yōu)點(diǎn)將在隨后的說(shuō)明中闡述,其中部分可以通過(guò)該說(shuō)明變得顯而易見,或者可以通過(guò)本發(fā)明的實(shí)踐來(lái)認(rèn)識(shí)。本發(fā)明的目的與優(yōu)點(diǎn)可以借助下文特別指出的手段與組合來(lái)實(shí)現(xiàn)與獲取。


圖1是一幅顯示根據(jù)本發(fā)明的一個(gè)第一實(shí)施例的一個(gè)中間代碼預(yù)處理裝置結(jié)構(gòu)的方框圖;圖2是一幅流程圖,它演示由根據(jù)本發(fā)明該第一實(shí)施例的一個(gè)中間代碼預(yù)處理裝置對(duì)中間代碼進(jìn)行預(yù)處理的一個(gè)處理過(guò)程;圖3是一幅映射圖,它演示一個(gè)中間代碼與一個(gè)替代指令之間由根據(jù)本發(fā)明該第一實(shí)施例的中間代碼預(yù)處理裝置作出的關(guān)聯(lián);圖4是一幅示意圖,它演示由根據(jù)本發(fā)明該第一實(shí)施例的中間代碼預(yù)處理裝置對(duì)該中間代碼進(jìn)行預(yù)處理的一個(gè)處理過(guò)程中的每個(gè)步驟;圖5是一幅表示根據(jù)本發(fā)明的一個(gè)第二實(shí)施例的一個(gè)中間代碼執(zhí)行裝置結(jié)構(gòu)的方框圖;圖6是一幅流程圖,它演示根據(jù)本發(fā)明該第二實(shí)施例的中間代碼執(zhí)行裝置中的處理過(guò)程;圖7是一幅表示根據(jù)本發(fā)明的一個(gè)第三實(shí)施例的一個(gè)中間代碼執(zhí)行裝置結(jié)構(gòu)的方框圖;圖8是根據(jù)本發(fā)明該第三實(shí)施例的中間代碼執(zhí)行裝置所用的某個(gè)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13的一幅數(shù)據(jù)結(jié)構(gòu)視圖;圖9是一幅流程圖,它表示根據(jù)本發(fā)明的一個(gè)第三實(shí)施例的中間代碼執(zhí)行裝置中某個(gè)中間代碼分析部分20的運(yùn)行過(guò)程;圖10是根據(jù)本發(fā)明的一個(gè)第四實(shí)施例的中間代碼執(zhí)行裝置所用的某個(gè)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13的一幅數(shù)據(jù)結(jié)構(gòu)視圖;圖11是根據(jù)本發(fā)明該第四實(shí)施例的中間代碼執(zhí)行裝置所用的對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13的一幅數(shù)據(jù)結(jié)構(gòu)視圖;圖12是一幅顯示根據(jù)本發(fā)明的一個(gè)第五實(shí)施例的一個(gè)中間代碼執(zhí)行裝置結(jié)構(gòu)的方框圖13是一幅流程圖,它表示根據(jù)本發(fā)明該第五實(shí)施例的中間代碼執(zhí)行裝置中某個(gè)中間代碼分析部分20的運(yùn)行過(guò)程;圖14是一幅顯示根據(jù)本發(fā)明的一個(gè)第六實(shí)施例的一個(gè)中間代碼執(zhí)行裝置結(jié)構(gòu)的方框第一實(shí)施例首先參看圖1至圖4來(lái)詳細(xì)說(shuō)明根據(jù)本發(fā)明該第一實(shí)施例的一個(gè)中間代碼預(yù)處理裝置。
圖1表示根據(jù)該第一實(shí)施例的某個(gè)中間代碼預(yù)處理裝置1的一種硬件結(jié)構(gòu),它將JavaTM類文件作為中間代碼進(jìn)行預(yù)處理。
這個(gè)中間代碼預(yù)處理裝置1包括一個(gè)存儲(chǔ)器部分101、一個(gè)處理部分102與一個(gè)輸入部分103。處理部分102是一個(gè)算術(shù)運(yùn)算器件,譬如一個(gè)處理器或一個(gè)微控制器。處理部分102的數(shù)量不限于1,可以采用能夠由多個(gè)處理器或多種算術(shù)運(yùn)算器件進(jìn)行分散處理的結(jié)構(gòu)。輸入部分103在該中間代碼預(yù)處理裝置中輸入一個(gè)類文件或類似的文件。從輸入部分103輸入的類文件被儲(chǔ)存在存儲(chǔ)器部分101內(nèi)。存儲(chǔ)器部分101包括一個(gè)存儲(chǔ)器,譬如一個(gè)RAM和/或一個(gè)ROM。這里為了方便只畫了一個(gè)存儲(chǔ)器部分101,但多個(gè)存儲(chǔ)器部分也可以分散排列。
一份使由多個(gè)指令構(gòu)成的一個(gè)指令模式101a與一個(gè)替代指令101b關(guān)聯(lián)的表格被儲(chǔ)存在存儲(chǔ)器部分101內(nèi)的一個(gè)預(yù)定區(qū)域中,一個(gè)類文件101c也儲(chǔ)存在這一部分。這里,指令模式101a是一個(gè)由多個(gè)字節(jié)代碼指令構(gòu)成的模式。
譬如,現(xiàn)在取整數(shù)相加作為一個(gè)示例進(jìn)行說(shuō)明。舉例來(lái)說(shuō),在這種情況下,一個(gè)指令模式“iload”、“iload”、“iadd”可以如圖3所示頻繁地出現(xiàn)在JavaTM類文件所包含的一個(gè)方法中。所以根據(jù)該第一實(shí)施例的中間代碼預(yù)處理裝置1在存儲(chǔ)器部分101內(nèi)儲(chǔ)存一份表格,其中該頻繁出現(xiàn)的指令模式與一個(gè)替代指令(譬如“v_v_iadd”)相關(guān)聯(lián),該替代指令執(zhí)行與該指令模式類似的處理。這里,“iload”是由兩個(gè)字節(jié)構(gòu)成的某個(gè)中間代碼的一個(gè)助記符號(hào),它將一個(gè)本地變量的某個(gè)數(shù)值壓入一個(gè)操作對(duì)象棧。此外,“iadd”是由一個(gè)字節(jié)構(gòu)成的某個(gè)中間代碼的一個(gè)助記符號(hào),它從該操作對(duì)象棧中彈出兩個(gè)值相加并將一個(gè)結(jié)果壓入該操作對(duì)象棧。
替代指令101b是一個(gè)在該替代指令可以執(zhí)行的環(huán)境中被解釋為與指令模式101a同樣處理過(guò)程的指令。相反,這個(gè)實(shí)施例假設(shè)存在一個(gè)中間代碼執(zhí)行裝置,它能夠?qū)⒃撎娲噶?01b解釋為實(shí)際相當(dāng)于替換前的該指令模式,并對(duì)其執(zhí)行。舉例來(lái)說(shuō),在上述情況下,這個(gè)中間代碼執(zhí)行裝置將該替代指令“v_v_iadd”解釋為與指令模式“iload”、“iload”、“iadd”同樣的處理過(guò)程,并對(duì)其執(zhí)行。順便提一下,當(dāng)執(zhí)行這個(gè)替代指令時(shí),也優(yōu)選通過(guò)防止頻繁訪問(wèn)存儲(chǔ)器、省略冗余處理、利用一個(gè)寄存器或類似部分來(lái)使指令執(zhí)行中的額外消耗因素最小。
而且,該替代指令101b的代碼長(zhǎng)度比指令模式101a短。譬如,替代指令“v_v_iadd”代碼有3個(gè)字節(jié)長(zhǎng),比替換前的5字節(jié)代碼長(zhǎng)度短。所以,按照這種預(yù)處理,類文件101c的長(zhǎng)度也可以縮短。
在上述結(jié)構(gòu)中,中間代碼預(yù)處理裝置1的各種功能由處理部分102執(zhí)行一系列軟件程序來(lái)實(shí)現(xiàn),而且對(duì)類文件101c進(jìn)行下述預(yù)處理。圖2是演示這個(gè)實(shí)施例中預(yù)處理步驟的一幅流程圖。這里假設(shè)類文件101c從輸入部分103被輸入到中間代碼預(yù)處理裝置1,并被儲(chǔ)存到存儲(chǔ)器部分101。根據(jù)這個(gè)假設(shè),該處理過(guò)程按下述步驟執(zhí)行。
當(dāng)中間代碼預(yù)處理過(guò)程開始時(shí)(S101),處理部分102首先從存儲(chǔ)器部分101讀取一份指令模式101a與替代指令101b相互關(guān)聯(lián)的表格(S102)。
然后,處理部分102檢索類文件101c并指定指令模式101a(S103)。舉例來(lái)說(shuō),如圖3與圖4所示,在類文件101c中指定了一個(gè)串行指令模式101a“iload”、“iload”、“iadd”。
以這種方法指定了該指令模式后,處理部分102將類文件101c中該指定指令模式101a替換為與指令模式101a關(guān)聯(lián)的替代指令101b(S104)。
圖4是一幅具體演示S104中處理過(guò)程的一個(gè)示例的示意圖。在這個(gè)示例中,包括在該指定指令模式中的“iload 8”、“iload 9”、“iadd”首先被轉(zhuǎn)換為“nop”、“nop”、“v_v_iadd 8,9”(第一階段)。這里,“nop”是一條不進(jìn)行操作的指令。
為了避免需要轉(zhuǎn)換的類文件長(zhǎng)度發(fā)生變化并防止該類文件所包括的條件轉(zhuǎn)移目的地改變,可以用這種方法在“v_v_iadd 8,9”前插入多個(gè)“nop”。經(jīng)過(guò)第一階段的處理之后,要執(zhí)行刪除每一個(gè)“nop”的處理并同時(shí)改變條件轉(zhuǎn)移的某個(gè)目的地(第二階段)。結(jié)果,就完成了S104中的處理。
這樣,就結(jié)束了中間代碼的預(yù)處理(S105)。
在根據(jù)該第一實(shí)施例的中間代碼預(yù)處理裝置中,需要執(zhí)行的代碼長(zhǎng)度由總共5個(gè)字節(jié)代碼“iload 8”、“iload 9”、“iadd”下降為一個(gè)3字節(jié)的指令“v_v_iadd”。所以,在減少需要執(zhí)行的指令數(shù)量的同時(shí)也省去了指令之間的冗余處理,該類文件的長(zhǎng)度也得以縮短。
通過(guò)將某個(gè)替代指令101b解釋為相當(dāng)于指令模式101a在替換前的處理并使額外消耗因素(如存儲(chǔ)器訪問(wèn))降到最小,然后對(duì)其加以執(zhí)行,那么如此獲得的中間代碼就可以在符合某個(gè)替代指令(如“v_v_iadd”)的執(zhí)行環(huán)境中快速執(zhí)行。此外,由于上述中間代碼的預(yù)處理只是該代碼的替換,所以只需要較低的額外消耗就能執(zhí)行,而且該類文件的長(zhǎng)度也不會(huì)像編譯為本機(jī)代碼那樣變長(zhǎng)。所以,該中間代碼的執(zhí)行性能會(huì)顯著改進(jìn)。
舉例來(lái)說(shuō),在將這個(gè)實(shí)施例應(yīng)用于一個(gè)嵌入式設(shè)備(如一部移動(dòng)電話)時(shí),也可以將上述替代指令101b能夠在其中執(zhí)行的環(huán)境安裝到該嵌入式設(shè)備,而且可以用中間代碼預(yù)處理裝置1將預(yù)處理后的類文件預(yù)先安裝或分配到該嵌入式設(shè)備。這樣一來(lái),該嵌入式設(shè)備中執(zhí)行的JavaTM應(yīng)用程序的性能就可以得到改進(jìn)。另外,預(yù)處理裝置1與替代指令101b能在其中執(zhí)行的執(zhí)行環(huán)境也可以安裝到該嵌入式設(shè)備,而且該類文件的預(yù)處理與該預(yù)處理后的類文件執(zhí)行兩者均可以在移動(dòng)電話中完成。
需要注意,包含彼此關(guān)聯(lián)的指令模式101a與替代指令101b的表格被儲(chǔ)存在這個(gè)實(shí)施例的存儲(chǔ)器部分101內(nèi),但這個(gè)表格可以嵌入到執(zhí)行該預(yù)處理的軟件程序中,或者它可以獨(dú)立于執(zhí)行該預(yù)處理的軟件程序而單獨(dú)提供。
此外,在上述預(yù)處理步驟中,S104的處理并不限于圖4所示。譬如,在圖4所示的第一階段處理后,“nop”并非必須刪除而不在該第二階段中進(jìn)行處理。在這種情況下,包括“nop”的中間代碼就可以按原樣在該執(zhí)行環(huán)境中執(zhí)行,或者該類文件也可以在執(zhí)行“nop”的刪除并改變?cè)搱?zhí)行環(huán)境中條件轉(zhuǎn)移的某個(gè)目的地的同時(shí)執(zhí)行。特別是在該后一情況下,優(yōu)選通過(guò)由該執(zhí)行環(huán)境利用空載時(shí)間來(lái)完成上述預(yù)處理。
第二實(shí)施例現(xiàn)在參看圖5與圖6說(shuō)明根據(jù)本發(fā)明的一個(gè)第二實(shí)施例的中間代碼執(zhí)行裝置。
圖5表示根據(jù)本發(fā)明的、能以JavaTM類文件作為中間代碼執(zhí)行的該第二實(shí)施例的一個(gè)中間代碼執(zhí)行裝置2的一種硬件結(jié)構(gòu)。中間代碼執(zhí)行裝置2包括一個(gè)存儲(chǔ)器部分201、一個(gè)處理部分202與一個(gè)輸入部分203。應(yīng)當(dāng)注意,存儲(chǔ)器部分201、處理部分202與輸入部分203基本類似于根據(jù)該第一實(shí)施例的中間代碼預(yù)處理裝置1的存儲(chǔ)器部分101、處理部分102與輸入部分103。而且,儲(chǔ)存在存儲(chǔ)器部分201內(nèi)的一個(gè)指令模式201a、一個(gè)替代指令201b與一個(gè)類文件201c也基本類似于根據(jù)該第一實(shí)施例的中間代碼預(yù)處理裝置1的儲(chǔ)存在存儲(chǔ)器101內(nèi)的指令模式101a、替代指令101b與類文件101c。所以關(guān)于這些部分的重復(fù)解釋在此從略。
在上述結(jié)構(gòu)中,中間代碼執(zhí)行裝置2中的各種功能都可以由處理部分202執(zhí)行一系列軟件程序來(lái)實(shí)現(xiàn),預(yù)處理按下面的說(shuō)明對(duì)類文件201c進(jìn)行,而且預(yù)處理后的類文件201c亦被執(zhí)行。圖6是演示這個(gè)實(shí)施例中類文件201c的預(yù)處理及執(zhí)行步驟的一幅流程圖。這些步驟的根據(jù)是,假設(shè)從輸入部分203預(yù)先輸入的類文件201c被儲(chǔ)存在存儲(chǔ)器部分201內(nèi)。
首先開始中間代碼的預(yù)處理(S201),處理部分202從存儲(chǔ)器部分201讀取一份彼此相關(guān)的指令模式201a與替代指令202b的表格(S202)。隨后,處理部分202檢索類文件201c并指定指令模式201a(S203)。然后,處理部分202將該指定指令模式201a替換為替代指令201b(S204)并結(jié)束該中間代碼的預(yù)處理(S205)。上述處理與該第一實(shí)施例中的預(yù)處理步驟相同,故而詳細(xì)說(shuō)明從略。
然后,執(zhí)行經(jīng)過(guò)上述預(yù)處理的類文件201c。這里執(zhí)行的是構(gòu)成該解釋器的軟件程序,它能夠?qū)⑻娲噶?01b解釋為相當(dāng)于指令模式201a的內(nèi)容并對(duì)其執(zhí)行,因此處理部分202從儲(chǔ)存在該存儲(chǔ)器部分內(nèi)的類文件201c中取出一個(gè)指令(S206),并由處理部分202執(zhí)行對(duì)應(yīng)于該取出的指令的處理(S207)。
根據(jù)根據(jù)該第二實(shí)施例的中間代碼執(zhí)行裝置2,將指令模式201a替換為替代指令201b的預(yù)處理也可以通過(guò)上述步驟應(yīng)用于類文件201c,從而執(zhí)行該預(yù)處理后的中間代碼。所以,縮短了類文件201c的代碼長(zhǎng)度,并可以執(zhí)行省去了指令間冗余處理的中間代碼,從而改進(jìn)了該中間代碼的執(zhí)行性能。而且,若執(zhí)行的是預(yù)處理后的中間代碼,那么通過(guò)將該替代指令解釋為額外消耗因素達(dá)到最小的處理并加以執(zhí)行,中間代碼的執(zhí)行性能可以進(jìn)一步改進(jìn)。
應(yīng)當(dāng)指出,盡管已經(jīng)說(shuō)明了該類文件的預(yù)處理與執(zhí)行按圖6所示步驟連續(xù)進(jìn)行的情況,但是該類文件的預(yù)處理與執(zhí)行并非必須連續(xù)進(jìn)行,而且可以預(yù)先對(duì)該類文件進(jìn)行預(yù)處理,然后執(zhí)行該預(yù)處理后的類文件。
另外,與替代指令201b關(guān)聯(lián)的指令模式201a也不限于一種類型,指令模式201a的類型數(shù)目可以是2或更大。在這種情況下,如果按圖6所示步驟連續(xù)進(jìn)行類文件的預(yù)處理與執(zhí)行,那么為了在該預(yù)處理的額外消耗盡可能降低的條件下開始執(zhí)行該類文件,可以只對(duì)與替代指令201b關(guān)聯(lián)的某些指令模式201a進(jìn)行用該替代指令來(lái)替換的預(yù)處理。
再有,構(gòu)成處理部分202的處理器或微處理器的性能也隨安裝中間代碼執(zhí)行設(shè)備2的個(gè)別設(shè)備而異,而且進(jìn)行預(yù)處理所需的某個(gè)附加時(shí)間或某個(gè)處理量亦隨情況而異。所以,如果有多個(gè)指令模式與該替代指令關(guān)聯(lián),那么需要替換的指令模式數(shù)量可以根據(jù)該設(shè)備的特性或不同情況作靜態(tài)調(diào)整。這樣,就可以實(shí)現(xiàn)符合安裝了中間代碼執(zhí)行裝置2的設(shè)備特性或者不同情況的預(yù)處理。譬如,如果根據(jù)本發(fā)明的中間代碼執(zhí)行裝置2被安裝在一部移動(dòng)電話中,那么當(dāng)下載到該移動(dòng)電話的類文件被立即執(zhí)行時(shí)就可以調(diào)整為只有某些指令模式需要替換,而當(dāng)它不需要立即執(zhí)行時(shí)就可以調(diào)整為所有指令模式均需要替換。這樣一來(lái),就可以根據(jù)情況在該移動(dòng)電話中執(zhí)行該類文件并同時(shí)進(jìn)行該預(yù)處理。
第三實(shí)施例現(xiàn)在參看圖7至圖9來(lái)詳細(xì)說(shuō)明根據(jù)本發(fā)明的一個(gè)第三實(shí)施例的一個(gè)中間代碼執(zhí)行裝置。
圖7是表示根據(jù)本發(fā)明該第三實(shí)施例的一個(gè)中間代碼執(zhí)行裝置100的一幅示意圖,該裝置將JavaTM類文件作為中間代碼執(zhí)行。這個(gè)中間代碼執(zhí)行裝置100有一個(gè)內(nèi)含一個(gè)處理器或一個(gè)微控制器的算術(shù)運(yùn)算部分5以及一個(gè)與該算術(shù)運(yùn)算部分5相連的存儲(chǔ)器部分10。
算術(shù)運(yùn)算部分5通過(guò)執(zhí)行一個(gè)預(yù)定的軟件程序而形成一個(gè)中間代碼分析部分20以及中間代碼執(zhí)行部分30A、30B與30C。這個(gè)軟件程序可以儲(chǔ)存在存儲(chǔ)器部分10內(nèi),或者它可以儲(chǔ)存在另一個(gè)存儲(chǔ)器部分內(nèi)。
每個(gè)中間代碼執(zhí)行部分30A、30B與30C都像一個(gè)順序解釋并執(zhí)行該中間代碼的解釋器那樣運(yùn)行。另外,中間代碼執(zhí)行部分30A、30B與30C是具有彼此不同處理特性的類型。譬如,中間代碼執(zhí)行部分30A處理一個(gè)快速字節(jié)代碼指令F、但同時(shí)處理一個(gè)慢速字節(jié)代碼指令G。中間代碼執(zhí)行部分30B處理一個(gè)快速字節(jié)代碼指令G、但同時(shí)處理一個(gè)慢速字節(jié)代碼指令F。中間代碼執(zhí)行部分30C對(duì)任何字節(jié)代碼指令都具有某個(gè)平均速度。
中間代碼分析部分20分析儲(chǔ)存在存儲(chǔ)器部分10內(nèi)的類文件12中所包括的某種方法的特性,選擇符合該特性的中間代碼執(zhí)行部分30,并且標(biāo)明該方法與選定中間代碼執(zhí)行部分的某種組合方式。中間代碼分析部分20所執(zhí)行的處理將在后面說(shuō)明。
存儲(chǔ)器部分10具有一個(gè)RAM、一個(gè)ROM及其他部分,它儲(chǔ)存類文件12以及一個(gè)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13。存儲(chǔ)器部分10可以具有一個(gè)物理上單一的結(jié)構(gòu),或者也可以有多個(gè)存儲(chǔ)器部分10。
類文件12是通過(guò)編譯一個(gè)用JavaTM生成的源代碼產(chǎn)生的,它包括一種或多種方法。這種方法是用來(lái)實(shí)現(xiàn)特定處理的多個(gè)字節(jié)代碼指令的一個(gè)集合。
對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13是一個(gè)管理每個(gè)中間代碼執(zhí)行部分30A、30B、30C中每個(gè)字節(jié)代碼指令的某種處理效率等級(jí)評(píng)分的數(shù)據(jù)庫(kù)。圖8是一幅數(shù)據(jù)結(jié)構(gòu)示意圖,它是對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13的具體內(nèi)容的一個(gè)示例。如圖8所示,對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13儲(chǔ)存每一個(gè)中間代碼執(zhí)行部分30A、30B、30C中每個(gè)字節(jié)代碼指令的某個(gè)處理效率等級(jí)評(píng)分。這里,該處理效率等級(jí)評(píng)分是一個(gè)表示該字節(jié)代碼指令能夠被有效執(zhí)行的級(jí)別數(shù)值,而且優(yōu)選根據(jù)各個(gè)中間代碼執(zhí)行部分30A、30B、30C的規(guī)范預(yù)先定義這個(gè)評(píng)分。
舉例來(lái)說(shuō),在圖8的最上方,定義了每個(gè)中間代碼執(zhí)行部分30A、30B、30C中某個(gè)字節(jié)代碼指令a的處理效率等級(jí)評(píng)分。更詳細(xì)地說(shuō),中間代碼執(zhí)行部分30A中的字節(jié)代碼指令a的處理效率等級(jí)評(píng)分為90;中間代碼執(zhí)行部分30B中的字節(jié)代碼指令a的處理效率等級(jí)評(píng)分為10;中間代碼執(zhí)行部分30C中的字節(jié)代碼指令a的處理效率等級(jí)評(píng)分為10(這里認(rèn)定數(shù)值較高時(shí)效率較好)。所以,根據(jù)這個(gè)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13可以發(fā)現(xiàn),由中間代碼執(zhí)行部分30A來(lái)執(zhí)行字節(jié)代碼指令a最有效。類似地,每個(gè)中間代碼執(zhí)行部分30A、30B、30C中字節(jié)代碼指令b與c以及所有其他字節(jié)代碼指令的處理效率等級(jí)評(píng)分都在對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13中進(jìn)行定義。
現(xiàn)在參看圖9的流程圖來(lái)說(shuō)明根據(jù)該第三實(shí)施例的中間代碼執(zhí)行裝置100中的中間代碼分析部分20所執(zhí)行的處理步驟。
中間代碼分析部分20首先從存儲(chǔ)器部分10內(nèi)的類文件12中讀取一種方法(S301)。然后,中間代碼分析部分20分析該讀取的方法并指定該方法中包括的字節(jié)代碼指令(S302)。由于一個(gè)方法包括多個(gè)字節(jié)代碼指令,所以中間代碼分析部分20重復(fù)這些步驟來(lái)指定該方法所包括的多個(gè)字節(jié)代碼指令中的每一個(gè)。
然后,中間代碼分析部分20詢問(wèn)存儲(chǔ)器部分10中的定義關(guān)系數(shù)據(jù)庫(kù)13,獲取對(duì)應(yīng)于S102中確定的各個(gè)字節(jié)代碼指令的處理效率等級(jí)評(píng)分,并計(jì)算這些評(píng)分的總和(S303)。
此后,中間代碼分析部分20根據(jù)S303中得到的各個(gè)中間代碼執(zhí)行部分30A、30B與30C中的處理效率等級(jí)總分來(lái)指定能夠最有效地執(zhí)行類文件12的中間代碼執(zhí)行部分(S304)。具體地講,中間代碼分析部分20將總分按照每個(gè)中間代碼執(zhí)行部分彼此比較,具有最高總分的中間代碼執(zhí)行部分就可以被指定為用來(lái)執(zhí)行該方法的中間代碼執(zhí)行部分。
最后,中間代碼分析部分20標(biāo)明該方法應(yīng)當(dāng)由S304中指定的中間代碼執(zhí)行部分來(lái)執(zhí)行(S305)。具體地講,譬如,可以在按照每個(gè)方法保留的管理信息中標(biāo)明應(yīng)當(dāng)實(shí)施執(zhí)行的一類中間代碼執(zhí)行部分,或者可以在該方法中標(biāo)記應(yīng)當(dāng)實(shí)施執(zhí)行的一類中間代碼執(zhí)行部分。對(duì)類文件12中所包含的所有方法執(zhí)行這種操作,然后中間代碼分析部分20結(jié)束處理。
現(xiàn)在用圖8所示的對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13為例來(lái)具體說(shuō)明S303與S304中的處理內(nèi)容。假設(shè)該方法包括字節(jié)代碼a與d,中間代碼分析部分20獲得中間代碼執(zhí)行部分30A中字節(jié)代碼指令a的處理效率等級(jí)評(píng)分90,中間代碼執(zhí)行部分30B的處理效率等級(jí)評(píng)分10和中間代碼執(zhí)行部分30C的處理效率等級(jí)評(píng)分10。然后,中間代碼分析部分20獲得中間代碼執(zhí)行部分30A中字節(jié)代碼指令d的處理效率等級(jí)評(píng)分50,中間代碼執(zhí)行部分30B的處理效率等級(jí)評(píng)分40和中間代碼執(zhí)行部分30C的處理效率等級(jí)評(píng)分90,并將它們加到字節(jié)代碼指令a的評(píng)分上。
在這種情況下,中間代碼執(zhí)行部分30A中的處理效率等級(jí)總分為140,中間代碼執(zhí)行部分30B中的總分為50,中間代碼執(zhí)行部分30C中的總分為100。所以,中間代碼分析部分20指定將要被用來(lái)執(zhí)行該方法的中間代碼執(zhí)行部分30A。
通過(guò)執(zhí)行上述處理,中間代碼執(zhí)行裝置100在執(zhí)行類文件12中所包括的方法時(shí),就可以根據(jù)中間代碼分析部分20標(biāo)明的內(nèi)容,采用按照該方法所包括的字節(jié)代碼指令來(lái)確定的最有效的中間代碼執(zhí)行部分30A、30B或30C。
所以,根據(jù)該第三實(shí)施例,由于包括在類文件12中的方法可以采用具有不同特性的中間代碼執(zhí)行部分30A、30B或30C被有效執(zhí)行,故而提供了具有高性能的中間代碼執(zhí)行裝置100。
第四實(shí)施例現(xiàn)在參看圖10與圖11來(lái)詳細(xì)說(shuō)明根據(jù)本發(fā)明的一個(gè)第四實(shí)施例的一個(gè)中間代碼執(zhí)行裝置。
根據(jù)該第四實(shí)施例的中間代碼執(zhí)行裝置與第三實(shí)施例基本結(jié)構(gòu)相同。但是,根據(jù)該第四實(shí)施例的中間代碼執(zhí)行裝置與該第三實(shí)施例的不同點(diǎn)在于,中間代碼分析部分20計(jì)算對(duì)某個(gè)方法所包括的各個(gè)字節(jié)代碼指令惟一確定的評(píng)分的一個(gè)總和,并根據(jù)這個(gè)總和的等級(jí)來(lái)指定中間代碼執(zhí)行部分30A、30B與30C中的任何一個(gè)。
在中間代碼分析部分20中,為了實(shí)現(xiàn)上述指定方法,該第四實(shí)施例的對(duì)應(yīng)相關(guān)數(shù)據(jù)庫(kù)13包括一份如圖10所示的定義了各個(gè)字節(jié)代碼指令與各個(gè)字節(jié)代碼指令評(píng)分之間對(duì)應(yīng)關(guān)系的表格,和一份如圖11所示的定義一個(gè)總分范圍與中間代碼執(zhí)行部分30A、30B與30C之間對(duì)應(yīng)關(guān)系的表格。
先根據(jù)圖10的示例給出對(duì)前者的說(shuō)明,圖10的左側(cè)表示各個(gè)字節(jié)代碼指令,圖10的右側(cè)表示按照這些指令設(shè)定的評(píng)分?jǐn)?shù)值。這里,字節(jié)代碼指令a的評(píng)分被惟一地設(shè)定為40;字節(jié)代碼指令b的評(píng)分為90;而字節(jié)代碼指令c的評(píng)分為50。
然后根據(jù)圖11的示例給出對(duì)后者的說(shuō)明,圖11的左側(cè)表示該總分的范圍,圖11的右側(cè)表示按照該總分范圍指定的中間代碼執(zhí)行部分30A、30B與30C中的任何一個(gè)。這里,如果某個(gè)給定方法所包括的字節(jié)代碼指令對(duì)應(yīng)的總分在低于201的某個(gè)范圍內(nèi),就指定中間代碼執(zhí)行部分30A。類似地,如果評(píng)分總和不低于201但低于401,就指定中間代碼執(zhí)行部分30B。如果它不低于401,就指定中間代碼執(zhí)行部分30C。
在該第四實(shí)施例中,中間代碼分析部分20所執(zhí)行的處理的基本步驟實(shí)際上與該第三實(shí)施例相同。
就是說(shuō),如圖7所示,中間代碼分析部分20從存儲(chǔ)器部分10內(nèi)的類文件12中讀取一種方法(S101),指定該方法中包含的字節(jié)代碼指令(S102),通過(guò)詢問(wèn)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13來(lái)獲取對(duì)應(yīng)于各個(gè)指定字節(jié)代碼指令的評(píng)分并計(jì)算這些評(píng)分的一個(gè)總和(S103)。此后,通過(guò)再次詢問(wèn)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13來(lái)按照該總分指定中間代碼執(zhí)行部分(S104),標(biāo)明該方法應(yīng)當(dāng)由該指定中間代碼執(zhí)行部分來(lái)執(zhí)行(S105),然后結(jié)束該處理過(guò)程。
現(xiàn)在選擇圖10與圖11所示的對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13為例來(lái)具體說(shuō)明S103與S104中的處理內(nèi)容。
假設(shè)該方法包括字節(jié)代碼指令a與c,中間代碼分析部分20取得字節(jié)代碼指令a的得分40與字節(jié)代碼指令c的得分55,這些得分的總和是95(ST103)。中間代碼分析部分20根據(jù)這個(gè)總和與圖11所示的表格來(lái)指定用于執(zhí)行該方法的中間代碼執(zhí)行部分30A。
在執(zhí)行上述處理的該第四實(shí)施例中,按照該方法所包括的字節(jié)代碼指令所確定的最有效的中間代碼執(zhí)行部分30A、30B或30C的使用方法與該第三實(shí)施例相同,從而提供了具有很高性能的中間代碼執(zhí)行裝置100。
第五實(shí)施例現(xiàn)在參看圖12與圖13詳細(xì)說(shuō)明根據(jù)本發(fā)明的一個(gè)第五實(shí)施例的一個(gè)中間代碼執(zhí)行裝置。
圖12是一幅表示根據(jù)本發(fā)明該第五實(shí)施例的一個(gè)中間代碼執(zhí)行裝置200的示意圖。中間代碼執(zhí)行裝置200的基本結(jié)構(gòu)與該第三與第四實(shí)施例相當(dāng),但和該第三與第四實(shí)施例的不同點(diǎn)在于,提供了一個(gè)通用中間代碼執(zhí)行部分31與一個(gè)專用中間代碼執(zhí)行部分32。
這個(gè)中間代碼執(zhí)行裝置采用通用中間代碼執(zhí)行部分31與專用中間代碼執(zhí)行部分32來(lái)執(zhí)行類文件12。通用中間代碼執(zhí)行部分31是一個(gè)解釋器,它順序解釋并執(zhí)行類文件,而且具有執(zhí)行所有字節(jié)代碼指令的一種常規(guī)功能。另一方面,專用中間代碼執(zhí)行部分32是一個(gè)專用解釋器,它能以比通用中間代碼執(zhí)行部分31更快的速度執(zhí)行特定的字節(jié)代碼指令,但不能執(zhí)行某些指令(譬如一個(gè)有關(guān)浮點(diǎn)算術(shù)運(yùn)算的字節(jié)代碼指令)。
而且,該第五實(shí)施例中的一個(gè)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13具有一種用來(lái)識(shí)別每個(gè)字節(jié)代碼指令是否能夠由專用中間代碼執(zhí)行部分32執(zhí)行的數(shù)據(jù)結(jié)構(gòu)。
現(xiàn)在參看圖13的流程圖來(lái)說(shuō)明根據(jù)該第五實(shí)施例的中間代碼執(zhí)行裝置200的中間代碼分析部分20所執(zhí)行的處理步驟。
中間代碼分析部分20首先從類文件12中讀取一種方法(S201)。然后,中間代碼分析部分20分析該讀取的方法,指定該方法中所包括的字節(jié)代碼指令(S202),并根據(jù)對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13的內(nèi)容判斷該指定字節(jié)代碼指令是否不能由專用中間代碼執(zhí)行部分32執(zhí)行(S203)。
在S203,如果認(rèn)定該不能由專用中間代碼執(zhí)行部分32執(zhí)行的字節(jié)代碼指令未被包括,那么中間代碼分析部分20就標(biāo)明該方法應(yīng)當(dāng)由專用中間代碼執(zhí)行部分32來(lái)執(zhí)行(S204)。另一方面,如果在S203中認(rèn)定該不能由專用中間代碼執(zhí)行部分32執(zhí)行的字節(jié)代碼指令已被包括,那么中間代碼分析部分20就標(biāo)明該方法應(yīng)當(dāng)由通用中間代碼執(zhí)行部分32來(lái)執(zhí)行(S205)。應(yīng)當(dāng)指出,該標(biāo)記方法可以類似于該第三與第四實(shí)施例的方法。對(duì)類文件12所包括的所有方法執(zhí)行上述操作,然后中間代碼分析部分20結(jié)束該處理過(guò)程。
根據(jù)上述該第五實(shí)施例,分別采用能夠以某個(gè)高速度執(zhí)行特定字節(jié)代碼指令但不能執(zhí)行某些字節(jié)代碼命令的專用中間代碼執(zhí)行部分32與能執(zhí)行所有指令的通用中間代碼執(zhí)行部分31,特定字節(jié)代碼指令就可以被快速執(zhí)行,并可以提供執(zhí)行所有字節(jié)代碼指令的中間代碼執(zhí)行裝置200。
第六實(shí)施例現(xiàn)在參看圖14來(lái)詳細(xì)說(shuō)明根據(jù)本發(fā)明的一個(gè)第六實(shí)施例的一個(gè)中間代碼執(zhí)行系統(tǒng)。
根據(jù)該第六實(shí)施例的中間代碼執(zhí)行系統(tǒng)300將一個(gè)JavaTM類文件作為某個(gè)中間代碼來(lái)執(zhí)行。而且如圖14所示,中間代碼執(zhí)行系統(tǒng)300主要包括一個(gè)儲(chǔ)存某個(gè)類文件302的存儲(chǔ)器部分301、一個(gè)實(shí)際上由某個(gè)圖中未畫的處理部分來(lái)執(zhí)行某個(gè)預(yù)定程序而形成的方法分析部分307、一個(gè)第一子系統(tǒng)308與一個(gè)第二子系統(tǒng)310。
儲(chǔ)存在存儲(chǔ)器部分301內(nèi)的類文件302可以通過(guò)編譯以JavaTM語(yǔ)言生成的一個(gè)源代碼來(lái)獲得。這個(gè)類文件包括方法303至305。
類文件302是作為一個(gè)壓縮jar文件分配的,它可以由中間代碼執(zhí)行系統(tǒng)300解壓。應(yīng)當(dāng)注意,該jar文件是一個(gè)存檔文件,其中為運(yùn)行該JavaTM程序所需的各個(gè)類文件被組織成一個(gè)文件。但是在圖14中,它已經(jīng)以該類文件的形式被儲(chǔ)存在存儲(chǔ)器部分310中。
第一子系統(tǒng)308包括一個(gè)第一解釋器309。另外,它可以利用第一解釋器309來(lái)順序解釋并執(zhí)行包含在JavaTM類文件中的字節(jié)代碼指令。第一解釋器309是一個(gè)常規(guī)解釋器,它與編譯中產(chǎn)生的一個(gè)指令代碼集合兼容,在本例中即與編譯以JavaTM語(yǔ)言生成的源代碼所產(chǎn)生的所有字節(jié)代碼指令兼容。
另一方面,該第二子系統(tǒng)310包括一個(gè)其某種結(jié)構(gòu)與某種功能基本與上述中間代碼預(yù)處理裝置相等的預(yù)處理部分311,以及一個(gè)第二解釋器312。預(yù)處理部分311對(duì)類文件302中的每種方法進(jìn)行將一個(gè)特定字節(jié)代碼指令模式替換為一個(gè)對(duì)應(yīng)替代指令的預(yù)處理,譬如將一個(gè)指令模式“iload”、“iload”、“iadd”替換為“v_v_iadd”。另外,第二解釋器312被配置得能夠解釋并執(zhí)行替換后增加到該方法中的替代指令以便應(yīng)付該處理以后的方法。
更具體地講,在預(yù)處理部分311將一個(gè)特定指令模式替換為一個(gè)替代指令意味著將構(gòu)成該特定指令模式的某個(gè)操作代碼與某個(gè)操作數(shù)的一個(gè)組合替換為一個(gè)新定義的替代指令的某個(gè)操作代碼與某個(gè)操作數(shù)的一個(gè)集合。應(yīng)當(dāng)指出,該操作代碼代表一個(gè)指令的運(yùn)行,該操作數(shù)代表作為該指令目標(biāo)的一個(gè)棧、一個(gè)寄存器或類似部分。
但是在JavaTM情況下,由于該操作代碼的長(zhǎng)度被限定為一個(gè)字節(jié),所以操作代碼的類型不能隨意增加。
因而在該第六實(shí)施例中,一個(gè)替代指令被分配給已經(jīng)分配了另一個(gè)指令的操作代碼,在執(zhí)行時(shí)該操作代碼被解釋為該替代指令,所執(zhí)行的步驟與替換前的指令模式所執(zhí)行的步驟相同。
就是說(shuō),在該第六實(shí)施例中,一個(gè)替代指令被分配給已經(jīng)在某個(gè)常規(guī)字節(jié)代碼指令中被分配了一個(gè)浮點(diǎn)算術(shù)運(yùn)算指令的操作代碼。然后在第二解釋器312中,該操作代碼按照由該替代指令替換前的指令模式所執(zhí)行的相同步驟被解釋與執(zhí)行。
這樣一來(lái),在第二子系統(tǒng)310中,該方法先在預(yù)處理部分311中受到預(yù)處理,然后它可以由第二解釋器312來(lái)執(zhí)行。但在上述示例中,包括浮點(diǎn)算術(shù)運(yùn)算指令的方法不能由第二子系統(tǒng)310執(zhí)行。
上述方法分析部分307分析需要執(zhí)行的方法中所包括的指令,并選擇能根據(jù)某個(gè)分析結(jié)果來(lái)執(zhí)行該方法的第一子系統(tǒng)308或者第二子系統(tǒng)310。然后,在該方法中標(biāo)記一個(gè)選擇結(jié)果。就是說(shuō),在該第六實(shí)施例中,方法分析部分307的功能對(duì)應(yīng)于該第五實(shí)施例中的中間代碼分析部分20的功能。
現(xiàn)在說(shuō)明用具有上述結(jié)構(gòu)的中間代碼執(zhí)行系統(tǒng)300來(lái)執(zhí)行類文件312中所包括的方法303的步驟。
方法分析部分307首先分析包括在方法303中的指令。
舉例來(lái)說(shuō),如果如上所述,在第二子系統(tǒng)310中該替代指令的操作代碼被分配給該浮點(diǎn)算術(shù)運(yùn)算指令的操作代碼,那么就判斷方法303是否包括一個(gè)浮點(diǎn)算術(shù)運(yùn)算指令。然后,根據(jù)某個(gè)判斷結(jié)果在方法303的一個(gè)預(yù)定位置306處標(biāo)記應(yīng)當(dāng)采用方法303的子系統(tǒng)。就是說(shuō),如果認(rèn)定方法303包括該浮點(diǎn)算術(shù)運(yùn)算的一個(gè)指令,那么就選擇在第一子系統(tǒng)309中執(zhí)行。同樣,如果認(rèn)定方法303不包括該該浮點(diǎn)算術(shù)運(yùn)算指令,那么就選擇在第二子系統(tǒng)310中執(zhí)行。
如果選擇在第一子系統(tǒng)309中執(zhí)行,那么方法303就按原樣由第一解釋器309順序解釋并執(zhí)行。
另一方面,如果選擇在第二子系統(tǒng)310中執(zhí)行,那么預(yù)處理部分311就對(duì)方法303進(jìn)行預(yù)處理,由方法303中所包括的多個(gè)指令構(gòu)成的一個(gè)固定模式就被替換為一個(gè)替代指令。然后該替代指令由與該替代指令相應(yīng)的第二解釋器312順序解釋并執(zhí)行。
然后,在如上所述完成方法303的執(zhí)行后,按照類文件302的內(nèi)容繼續(xù)順序執(zhí)行方法303至305中的任何一種直到該程序結(jié)束。
根據(jù)根據(jù)該第六實(shí)施例的中間代碼執(zhí)行系統(tǒng)300的結(jié)構(gòu)與方法執(zhí)行步驟,可以通過(guò)將該方法中包含的特定指令模式替換為該替代指令并加以執(zhí)行來(lái)有效地運(yùn)行不能執(zhí)行某些指令、但能夠在省略指令之間冗余處理的情況下快速執(zhí)行該方法的第二子系統(tǒng)310,并有效運(yùn)行能夠執(zhí)行所有指令的第一子系統(tǒng)308,從而以優(yōu)良性能執(zhí)行該類文件。
應(yīng)當(dāng)注意,該第一至第六實(shí)施例可以按許多方法修改。
譬如,在該第一與第二實(shí)施例中,已經(jīng)對(duì)以類文件為單位進(jìn)行預(yù)處理的情況進(jìn)行了說(shuō)明,但在這些實(shí)施例中也可以像該第六實(shí)施例那樣以方法為單位來(lái)進(jìn)行預(yù)處理。此外,該第三與第四實(shí)施例中的對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)13的數(shù)據(jù)結(jié)構(gòu)或者這個(gè)結(jié)構(gòu)中評(píng)分的設(shè)定也不限于上述的情況。
而且,代替該第六實(shí)施例中第一子系統(tǒng)309與第二子系統(tǒng)的某個(gè)組合,也可以采用兩個(gè)子系統(tǒng),其中每個(gè)都具有將該特定指令模式替換為該替代指令的預(yù)處理部分以及能夠執(zhí)行該替代指令的解釋器。在采用這些子系統(tǒng)的某個(gè)組合的情況下,將這些替代指令分配給兩個(gè)子系統(tǒng)中的不同操作代碼就可以分別利用這兩個(gè)系統(tǒng)。子系統(tǒng)的數(shù)量可以是3或更多。
再者,在該第六實(shí)施例中,盡管已經(jīng)對(duì)第二子系統(tǒng)310在執(zhí)行該方法時(shí)進(jìn)行預(yù)處理的情況進(jìn)行了說(shuō)明,但將該預(yù)處理后的方法保留在存儲(chǔ)器部分301內(nèi),那么對(duì)該方法已經(jīng)執(zhí)行過(guò)的預(yù)處理就可以省略。另外,在裝載該類文件時(shí),所有方法都可以用方法分析部分307進(jìn)行分析,而且應(yīng)當(dāng)在第二子系統(tǒng)310中執(zhí)行的方法也可以事先進(jìn)行預(yù)處理。還有,該預(yù)處理也可以在編譯時(shí)進(jìn)行。
此外,在不允許出現(xiàn)由方法分析部分307進(jìn)行的分析或預(yù)處理部分311進(jìn)行的預(yù)處理所造成的存儲(chǔ)器消耗、額外消耗等情況下,這些分析或預(yù)處理可以省略,該方法可以在第一子系統(tǒng)308中執(zhí)行。
而且,在第六實(shí)施例中,盡管已經(jīng)作為示例說(shuō)明了該替代指令被分配給業(yè)已分配了該浮點(diǎn)算術(shù)運(yùn)算指令的操作代碼的情況,但本發(fā)明并不限于此。該替代指令也可以分配給業(yè)已分配了任何其他指令的操作代碼。
而且,在該第一至第六實(shí)施例的每一個(gè)中,JavaTM類文件可以被應(yīng)用于該被修改的中間代碼,并且只要假設(shè)執(zhí)行該源代碼與該本機(jī)代碼之間的中間代碼,那么JavaTM以外的任何語(yǔ)言都可以應(yīng)用。
上面已經(jīng)說(shuō)明了根據(jù)本發(fā)明的第一至第六實(shí)施例。
就是說(shuō),根據(jù)該第一與第二實(shí)施例,指定了一個(gè)預(yù)定的指令模式,該指定指令模式被替換為一個(gè)代碼縮短的替代指令。所以指令的類型可以減少,而且可以獲得一個(gè)沒有指令之間冗余處理的新中間代碼。再者,在這個(gè)預(yù)處理中該中間代碼長(zhǎng)度不會(huì)增加。另外,由于預(yù)處理本身只是進(jìn)行簡(jiǎn)單替換,所以能夠快速執(zhí)行。再有,在對(duì)應(yīng)于該替代指令的執(zhí)行系統(tǒng)中執(zhí)行該新獲得的中間代碼,該中間代碼就可以快速執(zhí)行。
此外,根據(jù)該第三實(shí)施例,在該裝置中提供了多個(gè)中間代碼執(zhí)行部分,另一方面,該中間代碼分析部分通過(guò)分析作為某個(gè)執(zhí)行目標(biāo)的中間代碼來(lái)選擇并標(biāo)明適合有效地執(zhí)行該中間代碼的中間代碼執(zhí)行部分。所以,選擇該標(biāo)明的中間代碼執(zhí)行部分就可以快速執(zhí)行該中間代碼。而且,該中間代碼中包括的每個(gè)字節(jié)代碼指令與每個(gè)中間代碼執(zhí)行部件的處理效率等級(jí)評(píng)分之間的對(duì)應(yīng)關(guān)系已被儲(chǔ)存,用于執(zhí)行該中間代碼的中間代碼執(zhí)行部分也根據(jù)這個(gè)關(guān)系來(lái)指定。這樣,根據(jù)考慮了每個(gè)中間代碼執(zhí)行部分特性后所作的詳細(xì)設(shè)定值就能判斷適合有效執(zhí)行該字節(jié)指令的中間代碼執(zhí)行部分。
再者,根據(jù)該第四實(shí)施例,該中間代碼所包括的每個(gè)字節(jié)代碼指令與該中間代碼執(zhí)行部分的處理效率等級(jí)評(píng)分之間的對(duì)應(yīng)關(guān)系以及該評(píng)分的某個(gè)范圍與根據(jù)這個(gè)范圍指定的中間代碼執(zhí)行部分之間的對(duì)應(yīng)關(guān)系都被儲(chǔ)存,根據(jù)這些關(guān)系就可以指定用于執(zhí)行該中間代碼的中間代碼執(zhí)行部分。所以,即使配備的中間代碼執(zhí)行部分?jǐn)?shù)量很多,也可以具有這樣的好處,即不必按照每個(gè)中間代碼執(zhí)行部分的處理效率等級(jí)評(píng)分進(jìn)行設(shè)定與綜合。
另外,根據(jù)該第五實(shí)施例,提供了兩類中間代碼執(zhí)行部分,即專用中間代碼執(zhí)行部分與通用中間代碼執(zhí)行部分,該通用中間代碼執(zhí)行部分只執(zhí)行包括不能由該專用中間代碼執(zhí)行部分執(zhí)行的字節(jié)代碼指令在內(nèi)的中間代碼,另一方面,該專用中間代碼執(zhí)行部分執(zhí)行任何其他中間代碼。所以,在專用于特定處理的中間代碼執(zhí)行部分與能被一般使用的中間代碼執(zhí)行部分之間另外選擇一個(gè)供該中間代碼輸出的目的地的情況下,可以提供一個(gè)能以很高速度實(shí)現(xiàn)該中間代碼執(zhí)行的系統(tǒng)。
再有,根據(jù)該第六實(shí)施例,盡管不能執(zhí)行某些指令但能省去指令之間冗余處理、并通過(guò)將該方法中所包括的特定指令模式替換為該替代指令并加以執(zhí)行來(lái)快速執(zhí)行該方法第二子系統(tǒng)能夠有效運(yùn)行,但方法執(zhí)行速度雖不快卻能執(zhí)行所有指令的第一子系統(tǒng)也能夠有效運(yùn)行,所以能以極優(yōu)良的性能來(lái)執(zhí)行該類文件。
應(yīng)當(dāng)注意,本發(fā)明并不限于該第一至第六實(shí)施例,可以在本發(fā)明的范圍內(nèi)作各種改進(jìn)/修改。譬如在該第三至第五實(shí)施例中,采用了預(yù)先儲(chǔ)存該中間代碼所包括的字節(jié)代碼指令與適合有效執(zhí)行該字節(jié)代碼指令的中間代碼執(zhí)行部分之間對(duì)應(yīng)關(guān)系的結(jié)構(gòu)。但是,本發(fā)明并不限于此,它可以設(shè)計(jì)得能根據(jù)不同情形來(lái)改變?cè)搶?duì)應(yīng)關(guān)系。此外,用一個(gè)硬件加速器來(lái)實(shí)現(xiàn)至少一部分解釋器功能可以改進(jìn)該執(zhí)行速度。采用該硬件加速器有各種優(yōu)點(diǎn),譬如能防止所需存儲(chǔ)器數(shù)量增加、能利用適合某個(gè)嵌入設(shè)備的某種方法等等。
那些熟悉技術(shù)的人員很容易發(fā)現(xiàn)其他優(yōu)點(diǎn)與修改。所以本發(fā)明就其更廣的方面講不限于這里顯示及描述的個(gè)別細(xì)節(jié)與代表性實(shí)施例。因此,可以作出各種修改而不偏離該所附權(quán)利要求以及它們的等價(jià)條款所定義的總體發(fā)明概念的精神或范圍。
權(quán)利要求
1.一個(gè)對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼進(jìn)行預(yù)處理的中間代碼預(yù)處理裝置,其特征為包括一個(gè)儲(chǔ)存中間代碼的存儲(chǔ)器部分(101);以及一個(gè)處理部分(102),它將儲(chǔ)存在上述存儲(chǔ)器部分(101)內(nèi)的中間代碼中所包括的一個(gè)特定指令模式替換為一個(gè)預(yù)先與上述特定指令模式關(guān)聯(lián)的替代指令。
2.根據(jù)權(quán)利要求1的中間代碼預(yù)處理裝置,其特征為,上述預(yù)定程序語(yǔ)言是JavaTM語(yǔ)言,上述中間代碼是包括該JavaTM字節(jié)代碼指令的類文件(101c)。
3.一個(gè)對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼加以執(zhí)行的中間代碼執(zhí)行裝置,其特征為包括一個(gè)儲(chǔ)存中間代碼的存儲(chǔ)器部分(201);以及一個(gè)處理部分(202),它執(zhí)行如下處理a)將由儲(chǔ)存在上述存儲(chǔ)器部分(201)內(nèi)的上述中間代碼中所包括的多個(gè)指令構(gòu)成的一個(gè)特定指令模式替換為一個(gè)預(yù)先與上述特定指令模式關(guān)聯(lián)的替代指令;以及b)在順序解釋與執(zhí)行上述特定指令模式已經(jīng)被替換為上述替代指令的上述中間代碼時(shí),將該替代指令解釋為實(shí)際相當(dāng)于上述特定指令模式的處理并執(zhí)行該替代指令。
4.根據(jù)權(quán)利要求3的中間代碼執(zhí)行裝置,其特征為,上述預(yù)定程序語(yǔ)言是JavaTM語(yǔ)言,該中間代碼是包括該JavaTM字節(jié)代碼指令的類文件(201c)。
5.一個(gè)對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼進(jìn)行預(yù)處理的計(jì)算機(jī)程序產(chǎn)品,其特征為包括一個(gè)用來(lái)將上述中間代碼中所包括的一個(gè)特定指令模式替換為一個(gè)預(yù)先與上述特定指令模式關(guān)聯(lián)的替代指令的處理部分(102)。
6.根據(jù)權(quán)利要求5的計(jì)算機(jī)程序產(chǎn)品,其特征為,上述預(yù)定程序語(yǔ)言是JavaTM語(yǔ)言,上述中間代碼是包括該JavaTM字節(jié)代碼指令的類文件(101c)。
7.一個(gè)對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼加以執(zhí)行的計(jì)算機(jī)程序產(chǎn)品,其特征為包括一個(gè)執(zhí)行如下處理的處理部分(202)a)將由該中間代碼中所包括的多個(gè)指令構(gòu)成的一個(gè)特定指令模式替換為一個(gè)預(yù)先與上述特定指令模式關(guān)聯(lián)的替代指令;b)在解釋與執(zhí)行上述特定指令模式已經(jīng)被替換為上述替代指令的上述中間代碼時(shí),將該替代指令解釋為實(shí)際相當(dāng)于上述特定指令模式的低冗余處理并執(zhí)行該替代指令。
8.根據(jù)權(quán)利要求7的計(jì)算機(jī)程序產(chǎn)品,其特征為,上述預(yù)定程序語(yǔ)言是JavaTM語(yǔ)言,上述中間代碼是包括該JavaTM字節(jié)代碼指令的類文件(201c)。
9.一個(gè)對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼加以執(zhí)行的中間代碼執(zhí)行裝置,其特征為包括多個(gè)執(zhí)行該中間代碼的中間代碼執(zhí)行部分(30A、30B、30C);一個(gè)存儲(chǔ)器部分(10),它儲(chǔ)存該中間代碼,而且儲(chǔ)存該中間代碼所包括的一個(gè)指令與每個(gè)中間代碼執(zhí)行部分(30A、30B、30C)的適合程度之間的某種對(duì)應(yīng)關(guān)系;以及一個(gè)中間代碼解釋部分(20),它執(zhí)行如下處理a)識(shí)別儲(chǔ)存在上述存儲(chǔ)器部分(10)內(nèi)的中間代碼中所包括的指令;b)根據(jù)上述識(shí)別出的指令與上述對(duì)應(yīng)關(guān)系,從上述中間代碼執(zhí)行部分(30A、30B、30C)中確定能有效執(zhí)行上述中間代碼的一個(gè)合適部分;以及c)標(biāo)明該中間代碼與上述合適的中間代碼執(zhí)行部分(30A、30B、30C)之間的某種關(guān)系。
10.根據(jù)權(quán)利要求9的中間代碼執(zhí)行裝置,其特征為,上述對(duì)應(yīng)關(guān)系包括每個(gè)指令被各個(gè)中間代碼執(zhí)行部分(30A、30B、30C)執(zhí)行時(shí)的某種處理效率等級(jí)的一個(gè)評(píng)分表格,而且步驟b)還包括如下處理b1)根據(jù)上述評(píng)分表格,獲取一個(gè)上述識(shí)別的指令被各個(gè)中間代碼執(zhí)行部分(30A、30B、30C)執(zhí)行時(shí)的處理效率等級(jí)評(píng)分;b2)按照每個(gè)中間代碼執(zhí)行部分(30A、30B、30C)計(jì)算所得評(píng)分的總和;以及b3)根據(jù)按照每個(gè)中間代碼執(zhí)行部分(30A、30B、30C)求和所得的評(píng)分從上述中間代碼執(zhí)行部分(30A、30B、30C)中確定一個(gè)合適的部分。
11.根據(jù)權(quán)利要求9的中間代碼執(zhí)行裝置,其特征為,上述對(duì)應(yīng)關(guān)系包括分配給每個(gè)指令的某個(gè)得分?jǐn)?shù)值以及與各個(gè)中間代碼執(zhí)行部分(30A、30B、30C)對(duì)應(yīng)的某個(gè)得分總值的一個(gè)范圍,而且步驟b)還包括如下處理b1)根據(jù)上述對(duì)應(yīng)關(guān)系獲取一個(gè)識(shí)別的指令的一個(gè)得分;b2)計(jì)算所獲取的各個(gè)得分的總值;以及b3)根據(jù)上述對(duì)應(yīng)關(guān)系與上述算得的總值從上述中間代碼執(zhí)行部分(30A、30B、30C)中確定一個(gè)合適的部分。
12.根據(jù)權(quán)利要求9的中間代碼執(zhí)行裝置,其特征為,上述預(yù)定程序語(yǔ)言是JavaTM語(yǔ)言,上述中間代碼是包括JavaTM字節(jié)代碼指令的JavaTM類文件(12)。
13.一個(gè)對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼加以執(zhí)行的中間代碼執(zhí)行裝置,其特征為包括一個(gè)專用中間代碼執(zhí)行部分(32);一個(gè)通用中間代碼執(zhí)行部分(31);一個(gè)其中儲(chǔ)存中間代碼的存儲(chǔ)器部分(10);以及一個(gè)中間代碼分析部分(20),它執(zhí)行如下步驟a)分析儲(chǔ)存在該存儲(chǔ)器部分(10)內(nèi)的上述中間代碼,判斷不能由上述專用中間代碼執(zhí)行部分(32)執(zhí)行的某個(gè)指令是否被包含在該中間代碼所包括的指令當(dāng)中;b)如果確定該不能執(zhí)行的指令未被包含則標(biāo)明該中間代碼應(yīng)當(dāng)由專用中間代碼執(zhí)行部分(32)執(zhí)行,如果確定該不能執(zhí)行的指令已被包含則標(biāo)明該中間代碼應(yīng)當(dāng)由通用中間代碼執(zhí)行部分(32)執(zhí)行。
14.根據(jù)權(quán)利要求13的中間代碼執(zhí)行裝置,其特征為,上述預(yù)定程序語(yǔ)言是JavaTM語(yǔ)言,上述中間代碼是包括JavaTM字節(jié)代碼指令的JavaTM類文件(12)。
15.一個(gè)對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼加以執(zhí)行的中間代碼執(zhí)行系統(tǒng),其特征為包括一個(gè)其中儲(chǔ)存中間代碼的存儲(chǔ)器部分(301);一個(gè)預(yù)處理部分(311),它對(duì)儲(chǔ)存在上述存儲(chǔ)器部分(301)內(nèi)的中間代碼進(jìn)行預(yù)處理,即將上述中間代碼所包括的一個(gè)特定指令模式替換為一個(gè)預(yù)先與上述特定指令模式關(guān)聯(lián)的替代指令;一個(gè)不能解釋并執(zhí)行該替代指令的第一解釋器(309);一個(gè)將上述替代指令解釋為相當(dāng)于上述指令模式替換前的內(nèi)容并對(duì)其執(zhí)行的的第二解釋器(312);以及一個(gè)中間代碼分析部分(307),它分析由上述預(yù)處理部分處理后的上述中間代碼,判斷該替代指令是否包括在該中間代碼之中,如果該替代指令被包括則標(biāo)明該中間代碼應(yīng)當(dāng)由該第一解釋器(30)執(zhí)行,而如果該替代指令未被包括則標(biāo)明該中間代碼應(yīng)當(dāng)由該第二解釋器(312)執(zhí)行。
16.一個(gè)對(duì)某種預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼加以執(zhí)行的中間代碼執(zhí)行系統(tǒng),其特征為包括一個(gè)第一子系統(tǒng)(308),它具有一個(gè)能解釋并執(zhí)行編譯時(shí)生成的所有指令的第一解釋器(309);一個(gè)第二子系統(tǒng)(310),它具有一個(gè)進(jìn)行預(yù)處理,即將由該中間代碼中所包括的多個(gè)指令構(gòu)成的某個(gè)指令模式替換為一個(gè)替代指令的預(yù)處理部分(311),以及一個(gè)能將上述替代指令解釋為相當(dāng)于上述指令代碼替換前的內(nèi)容并執(zhí)行上述替代指令的第二解釋器(312);以及一個(gè)選擇部分(307),它根據(jù)需要執(zhí)行的該中間代碼或者選擇由上述第一子系統(tǒng)(308)的上述第一解釋器(309)執(zhí)行該中間代碼,或者選擇由上述預(yù)處理部分(311)對(duì)該中間代碼進(jìn)行預(yù)處理,然后由上述第二子系統(tǒng)(310)的上述第二解釋器(312)執(zhí)行該中間代碼。
17.根據(jù)權(quán)利要求16的中間代碼執(zhí)行系統(tǒng),其特征為,上述第二子系統(tǒng)(310)將上述替代指令分配給一個(gè)在上述第一子系統(tǒng)(308)中已被分配了一個(gè)替代指令的操作代碼,而且上述選擇部分(307)在上述特定指令被包括在需要執(zhí)行的中間代碼中時(shí)選擇由上述第一子系統(tǒng)(308)進(jìn)行處理,而在上述特定指令不被包括在需要執(zhí)行的中間代碼中時(shí)選擇由上述第二子系統(tǒng)(310)進(jìn)行處理。
18.根據(jù)權(quán)利要求16的中間代碼執(zhí)行系統(tǒng),其特征為,上述預(yù)定程序語(yǔ)言是JavaTM語(yǔ)言,上述中間代碼是JavaTM類文件(302),而且上述指令是一個(gè)JavaTM字節(jié)代碼指令。
19.一個(gè)對(duì)某個(gè)預(yù)定程序語(yǔ)言生成的源代碼經(jīng)編譯后所得的中間代碼加以執(zhí)行的中間代碼執(zhí)行系統(tǒng),其特征為包括一個(gè)第一子系統(tǒng),它具有一個(gè)能進(jìn)行預(yù)處理,即將由該中間代碼中包括的多個(gè)指令構(gòu)成的一個(gè)第一指令模式替換為一個(gè)第一替代指令的預(yù)處理部分,以及一個(gè)能將上述第一替代指令解釋為相當(dāng)于上述第一指令模式的內(nèi)容并執(zhí)行該第一替代指令的第一解釋器;一個(gè)第二子系統(tǒng),它具有一個(gè)進(jìn)行預(yù)處理,即將由該中間代碼中所包括的一個(gè)第二指令模式替換為一個(gè)第二替代指令的預(yù)處理部分,以及一個(gè)能將上述第二替代指令解釋為相當(dāng)于上述第二指令模式并執(zhí)行該第二替代指令的第二解釋器;以及一個(gè)選擇部分,它根據(jù)需要執(zhí)行的中間代碼或者選擇在該第一子系統(tǒng)中由上述第一預(yù)處理部分對(duì)該中間代碼進(jìn)行預(yù)處理并由該第一解釋器對(duì)其執(zhí)行,或者選擇在該第二子系統(tǒng)中由上述第二預(yù)處理部分對(duì)該中間代碼進(jìn)行預(yù)處理,然后由該第二解釋器對(duì)其執(zhí)行。
20.根據(jù)權(quán)利要求19的中間代碼執(zhí)行系統(tǒng),其特征為,上述第一子系統(tǒng)將上述第一替代指令分配給一個(gè)第一操作代碼,上述第二子系統(tǒng)將上述第二替代指令分配給一個(gè)第二操作代碼,而且上述選擇部分在需要執(zhí)行的中間代碼包括一個(gè)與上述第一操作代碼有關(guān)的指令時(shí)選擇由上述第二子系統(tǒng)進(jìn)行處理,在需要執(zhí)行的該中間代碼包括一個(gè)與上述第二操作代碼有關(guān)的指令時(shí)選擇由上述第一子系統(tǒng)(308)進(jìn)行處理。
21.根據(jù)權(quán)利要求19的中間代碼執(zhí)行系統(tǒng),其特征為,上述預(yù)定程序語(yǔ)言是JavaTM語(yǔ)言,上述中間代碼是JavaTM類文件,而且上述指令是JavaTM字節(jié)代碼指令。
全文摘要
這個(gè)中間代碼執(zhí)行系統(tǒng)具有一個(gè)第一子系統(tǒng)(308),它有一個(gè)對(duì)應(yīng)于編譯過(guò)程中生成的一個(gè)指令集合、并順序解釋及執(zhí)行某個(gè)中間代碼中所包括的指令的第一解釋器(309);一個(gè)第二子系統(tǒng)(310),它有一個(gè)對(duì)該中間代碼進(jìn)行預(yù)處理,即將由多個(gè)指令構(gòu)成的一個(gè)指令模式替換為一個(gè)替代指令的一個(gè)預(yù)處理部分(311),以及一個(gè)對(duì)應(yīng)于包括該替代指令的指令集合、并順序解釋及執(zhí)行該預(yù)處理后的中間代碼中所包括的某個(gè)指令代碼的一個(gè)第二解釋器(312);以及一個(gè)方法分析部分(308),它或者選擇由該第一解釋器(309)來(lái)執(zhí)行該中間代碼,或者選擇由該預(yù)處理部分(311)對(duì)該中間代碼進(jìn)行預(yù)處理,然后由該第二解釋器(312)來(lái)執(zhí)行該中間代碼。
文檔編號(hào)G06F9/45GK1419192SQ0214819
公開日2003年5月21日 申請(qǐng)日期2002年10月31日 優(yōu)先權(quán)日2001年10月31日
發(fā)明者小林哲之 申請(qǐng)人:亞普公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1