專利名稱::永久高速緩存裝置和方法
技術(shù)領(lǐng)域:
:本發(fā)明一般涉及可控制運(yùn)行時間環(huán)境,更具體地說,涉及在可控制運(yùn)行時間環(huán)境中使用的永久高速緩存的裝置和方法。
背景技術(shù):
:增長的軟件應(yīng)用程序可移植性(也就是,在各種具有不同硬件、操作系統(tǒng)等等的平臺上執(zhí)行給定軟件應(yīng)用程序的能力)以及縮短獨(dú)立軟件賣方(ISVs)交易的時間所帶來的需求使受控運(yùn)行時間環(huán)境的發(fā)展和使用得到發(fā)展。受控運(yùn)行時間環(huán)境典型地使用諸如java和C#的動態(tài)編程語言來實現(xiàn)。軟件引擎(例如,java虛擬計算機(jī)(JVM),通用語言運(yùn)行時間(CLR)等),一般是指運(yùn)行時間環(huán)境執(zhí)行動態(tài)編程語言指令。運(yùn)行時間環(huán)境插入或耦接在將被執(zhí)行的動態(tài)編程語言指令(例如,java程序)和目標(biāo)執(zhí)行平臺(也就是,執(zhí)行動態(tài)程序的計算機(jī)的硬件和操作環(huán)境)之間,從而以平臺無關(guān)的方式執(zhí)行動態(tài)程序。動態(tài)編程語言指令(例如,java指令,C#指令等)不是靜態(tài)編譯并直接耦接到由目標(biāo)平臺(也就是,目標(biāo)處理系統(tǒng)或平臺的操作系統(tǒng)和硬件)執(zhí)行的本機(jī)碼或機(jī)器代碼,而是靜態(tài)編程為中間語言(例如,字節(jié)碼)且隨后中間語言由即時(JIT)編譯器編譯為將由目標(biāo)處理系統(tǒng)或平臺執(zhí)行的本機(jī)碼或機(jī)器代碼。典型地,JIT編譯器由運(yùn)行時間環(huán)境提供,該運(yùn)行時間環(huán)境由諸如計算機(jī)系統(tǒng)的目標(biāo)處理平臺的操作系統(tǒng)作為主機(jī)。這樣,運(yùn)行時間環(huán)境和(特別是)JIT編譯器起著將平臺無關(guān)的程序指令(例如,java指令,C#指令等)轉(zhuǎn)變?yōu)楸緳C(jī)碼(也就是,由基礎(chǔ)目標(biāo)處理系統(tǒng)或平臺執(zhí)行的機(jī)器碼的說明)。為改進(jìn)動態(tài)編程語言的整體性能,許多受控運(yùn)行時間環(huán)境配置JIT編譯器,使其在執(zhí)行應(yīng)用程序前不必編譯整個軟件應(yīng)用程序。作為替代,只有當(dāng)前需要執(zhí)行的應(yīng)用程序的軟件對象或方法由JIT編譯器編譯并隨后由目標(biāo)處理系統(tǒng)或平臺執(zhí)行。雖然這種部分編譯技術(shù)能夠改進(jìn)性能,JIT編譯器從中間語言代碼產(chǎn)生本機(jī)碼的速率還是對動態(tài)或平臺無關(guān)的程序語言整體性能產(chǎn)生巨大沖擊。為了改進(jìn)產(chǎn)生本機(jī)碼的速率,許多JIT編碼器在內(nèi)部高速緩存或存儲器內(nèi)高速緩存中存儲編譯的中間語言(也就是,本機(jī)碼)。在此方法中,JIT編譯器的內(nèi)部高速緩存結(jié)構(gòu)消除了再編譯(例如)當(dāng)需要重復(fù)調(diào)用應(yīng)用程序方法時需頻繁調(diào)用先前已編譯的方法或?qū)ο蟮男枰2恍业厥?,由許多受控運(yùn)行時間環(huán)境使用的內(nèi)部高速緩存或存儲器內(nèi)高速緩存在運(yùn)行期結(jié)束、系統(tǒng)重新啟動后不再持續(xù)。換言之,采用這些已知的存儲器內(nèi)高速緩存機(jī)制,在運(yùn)行期后、系統(tǒng)重新啟動,高速緩存編碼丟失且JIT編譯器必須再編譯需要執(zhí)行的所有對象或方法,而不管那些對象或方法是否在前面的運(yùn)行期間已經(jīng)編譯過。附圖簡述圖1是可用于實施這里所述的永久高速緩存的裝置和方法的示范配置的方框圖;圖2是可配置圖1中所示的即時編譯器和永久高速緩存引擎的示范方法的流程圖;圖3是可配置圖1中所示的永久高速緩存引擎以產(chǎn)生用于永久高速緩存中高速緩存的本機(jī)碼的標(biāo)識符的示范方法的流程圖;圖4示出可用于產(chǎn)生用作本機(jī)碼標(biāo)識符的混列碼的示例偽碼;圖5是使用這里所述的裝置和方法的示范處理系統(tǒng)的方框圖。詳細(xì)描述圖1是可用于實施這里所述的永久高速緩存的裝置和方法的示范配置的方框圖。對示范配置10,將由多個動態(tài)編程語言和/或指令中的一個所組成的一個或多個軟件應(yīng)用程序12提供給語言編譯器14。應(yīng)用程序12可采用諸如java或C#這樣與平臺無關(guān)的語言來編寫。不過,也可使用任意其它的動態(tài)或與平臺無關(guān)的計算機(jī)語言或指令。另外,可將一些或所有的應(yīng)用程序12存儲在將執(zhí)行應(yīng)用程序的系統(tǒng)中。替換地,可將一些或所有的應(yīng)用程序存儲在與執(zhí)行應(yīng)用程序12的系統(tǒng)分離(可能遠(yuǎn)程定位)的系統(tǒng)中。語言編譯器14靜態(tài)編譯一個或多個應(yīng)用程序12以產(chǎn)生編譯代碼16。經(jīng)編譯的代碼16是以二進(jìn)制形式存儲在存儲器(沒有示出)中的中間語言代碼或指令(例如,以java編寫的編譯應(yīng)用程序中的字節(jié)碼)。如應(yīng)用程序12一樣,編譯代碼16可以本地存儲在將執(zhí)行編譯代碼16的目標(biāo)系統(tǒng)18中。目標(biāo)系統(tǒng)18可為計算機(jī)系統(tǒng)或是如下面結(jié)合圖5描述的更詳細(xì)的系統(tǒng)。目標(biāo)系統(tǒng)18可聯(lián)系一個或多個終端用戶。替換地,編譯代碼16可通過通訊鏈接或包括(例如局域網(wǎng)、因特網(wǎng)、蜂窩網(wǎng)或其它無線通訊系統(tǒng))送到目標(biāo)系統(tǒng)18。編碼代碼16的一個或多個部分(例如,一個或多個軟件應(yīng)用程序)可由目標(biāo)系統(tǒng)18執(zhí)行。特別是,在操作系統(tǒng)20(例如,Windows、Linux)中寄宿執(zhí)行經(jīng)編譯代碼16的一個或多個部分的運(yùn)行時間環(huán)境22。例如,在編譯的代碼16包括java字節(jié)碼的情況中,運(yùn)行時間環(huán)境22基于Java虛擬計算機(jī)(JVM)或執(zhí)行Java字節(jié)碼的類似裝置。運(yùn)行時間環(huán)境22將經(jīng)編譯的代碼16(也就是,中間語言指令或代碼)的一個或多個部分裝載到運(yùn)行時間環(huán)境22可訪問的存儲器(沒有示出)。較佳地,運(yùn)行時間環(huán)境18將整個應(yīng)用程序(或可能的多個應(yīng)用程序)裝載到存儲器中并為了類型安全驗證編譯或中間語言代碼16。在應(yīng)用程序或多個應(yīng)用程序由運(yùn)行時間環(huán)境22裝載到存儲器中后,與由正執(zhí)行或需要被執(zhí)行的應(yīng)用程序調(diào)用的方法或?qū)ο笥嘘P(guān)的中間語言指令由即時(JIT)編譯器24處理。該JIT編譯器24編譯中間語言指令以產(chǎn)生在計算機(jī)系統(tǒng)18中的一個或多個處理器(諸如,例如圖5示出的處理器122)執(zhí)行的本機(jī)碼或機(jī)器代碼。較佳地,JIT編譯器24在JIT存儲器內(nèi)高速緩存(JITIMC)26中存儲本機(jī)碼(也就是,由計算機(jī)系統(tǒng)18兼容并可由其執(zhí)行的機(jī)器代碼)。在此方法中,運(yùn)行時間環(huán)境22可再使用與先前編譯的被調(diào)用超過一次的方法相關(guān)的本機(jī)碼。換言之,被編譯為本機(jī)碼并存儲在JITIMC26中的中間語言指令可由運(yùn)行時間環(huán)境22再使用并執(zhí)行多次。不過,JITIMC26是非永久性高速緩存,在與運(yùn)行時間環(huán)境22相關(guān)的運(yùn)行期結(jié)束,計算機(jī)系統(tǒng)18重新啟動后,不保留數(shù)據(jù)。雖然所述的JITIMC26是被描述的運(yùn)行時間環(huán)境22中JIT編譯器24的一部分,但其它配置的JITIMC26也是允許的。例如,JITIMC26可為寄宿在操作系統(tǒng)20中的其它運(yùn)行模塊、對話期間或環(huán)境(沒有示出)中的另一個數(shù)據(jù)結(jié)構(gòu)的一部分。在一些例子中,可實現(xiàn)JITIMC26使得本機(jī)碼存儲在公知的數(shù)據(jù)結(jié)構(gòu)類型中,比如說,v表格(vtable)。如結(jié)合圖5所更詳細(xì)地描述的,JITIMC26可在與計算機(jī)系統(tǒng)18相關(guān)的系統(tǒng)存儲器(諸如,在圖5中示出的系統(tǒng)存儲器134)中實現(xiàn)。與已知的運(yùn)行時間環(huán)境相反,該運(yùn)行時間環(huán)境22包括耦接到JIT編譯器24的永久性高速緩沖存儲器引擎。一般,當(dāng)JIT編譯器24產(chǎn)生本機(jī)碼或機(jī)器代碼時,永久性高速緩沖存儲器引擎28與JIT編譯器24通信。當(dāng)JIT編譯器24為所執(zhí)行的應(yīng)用程序的特別方法類型產(chǎn)生本機(jī)碼序列時,JIT編譯器24將新產(chǎn)生的本機(jī)碼存儲在JITIMC26中。此外,JIT編譯器24與永久高速緩沖存儲器引擎28一同將新產(chǎn)生的本機(jī)碼存儲在永久高速緩沖存儲器30中。永久高速緩沖存儲器30較佳地是非易失性大容量存貯器裝置,比如,使用磁或光存儲介質(zhì)的盤驅(qū)動器。不過,永久高速緩沖存儲器30可使用其它類型裝置或存儲裝置和介質(zhì)的組合來實現(xiàn)。例如,可使背電池(battery-backed)的靜態(tài)隨機(jī)存儲器(SRAM)、靜態(tài)動態(tài)隨機(jī)存儲器(SDRAM)等等。在任何情況下,永久高速緩沖存儲器30具有比JITIMC26更高的存儲容量,并在其后是平臺重新啟動(也就是,計算機(jī)系統(tǒng)18的重新啟動)的運(yùn)行對話期間以外保留高速緩存的本機(jī)碼。如下面結(jié)合圖2更詳細(xì)描述的,永久性高速緩沖存儲器30用作JITIMC28的第二級或備用的高速緩沖存儲器。不過,JITIMC26具有相對有限的存儲容量,因此,使用數(shù)據(jù)清除策略或技術(shù)移走沒有以充分頻率使用的高速緩存編碼以證明其相對稀少的存儲資源的消費(fèi)是正確的。有許多已知的可由JITMIC26使用的數(shù)據(jù)清除技術(shù)。一個這樣的技術(shù)是公知的最少最近使用算法,其趨于保留(也就是,不清除)不久將會使用的可能性相對高的高速緩存數(shù)據(jù)。在任何情況中,JITIMC26可清除或消除在永久高速緩沖存儲器30中仍然保留的高速緩存編碼。作為結(jié)果,JITMIC26典型地只保持當(dāng)前在永久高速緩沖存儲器30中存儲的高速緩存編碼的一個子集。除了與計算機(jī)系統(tǒng)18執(zhí)行的一個或多個應(yīng)用程序相關(guān)的本機(jī)碼外,永久高速緩沖存儲器引擎28也還存儲與永久高速緩沖存儲器30中的應(yīng)用程序有關(guān)的增加信息。例如,與應(yīng)用程序12、最后運(yùn)行時間/日期、最后編譯時間/日期等有關(guān)的版本信息可和用于應(yīng)用程序12的本機(jī)碼一起存儲。該附加信息可由永久高速緩沖存儲器配置管理器32、永久高速緩沖存儲器引擎28和/或JIT編譯器24使用以利于中間語言代碼的編譯及永久高速緩沖存儲器30的管理??梢允褂萌我饫诒緳C(jī)碼信息的有效檢索數(shù)據(jù)結(jié)構(gòu)將信息存儲在永久高速緩沖存儲器30中。例如,可使用關(guān)系數(shù)據(jù)庫按類型存儲本機(jī)碼方法。此外,應(yīng)用程序名稱、方法類型、方法名稱或其任意組合可用作永久高速緩沖存儲器30的數(shù)據(jù)庫記錄中的密鑰。另外,本機(jī)碼信息可采用可擴(kuò)展標(biāo)記語言(XML)文件(或類似文件)存儲或組織在永久高速緩沖存儲器30中。永久高速緩沖存儲器配置管理器32能使用戶指定何時需要再編譯分類方法。例如,永久高速緩沖存儲器配置管理器32可以使用戶指定在平臺或計算機(jī)系統(tǒng)18重新啟動后再編譯方法。作為替代,用戶可以指定周期性地(例如,一星期一次)再編譯方法。此外,用戶可以指令永久高速緩沖存儲器配置管理器32強(qiáng)制再編譯一個或多個方法,而不管該方法是否已經(jīng)編譯過。例如,在新的硬件已被添加到平臺或計算機(jī)系統(tǒng)18的情況下,或修改現(xiàn)有硬件的情況下,用戶可調(diào)用一個或多個方法的再編譯,使得由計算機(jī)系統(tǒng)18執(zhí)行的應(yīng)用程序能夠使用新增或修改的硬件。一般,JIT編譯器24和永久高速緩沖存儲器引擎28互相作用,使得JIT編譯器24編譯中間語言代碼為只有當(dāng)本機(jī)碼并沒有在此時存儲在JITIMC26或永久高速緩沖存儲器30中時才需要執(zhí)行方法的本機(jī)碼。特別是,在與所執(zhí)行方法相關(guān)的中間語言代碼的JIT編譯執(zhí)行之前,該JIT編譯器24首先為與該方法相關(guān)的本機(jī)碼檢查JITMIC26。如果JIT編譯器24當(dāng)為本機(jī)碼檢查JITMIC26時遭遇高速緩沖存儲器過錯,JIT編譯器24為本機(jī)碼檢查永久高速緩沖存儲器30。如果JIT編譯器24當(dāng)檢查永久高速緩沖存儲器30時也遭遇高速緩沖存儲器過錯,則JIT編譯器24編譯中間語言代碼并在JITIMC26中存儲結(jié)果本機(jī)碼。另外,永久高速緩沖存儲器引擎28也在永久高速緩沖存儲器30中存儲新產(chǎn)生的本機(jī)碼(其存儲在JITIMC26中)。圖2是可配置成JTI編譯24和永久高速緩沖存儲器引擎28相互作用的示范方法的流程圖。如圖2所示,在運(yùn)行時間環(huán)境22中的裝載器(沒有示出)將與由計算機(jī)系統(tǒng)或平臺18執(zhí)行的應(yīng)用程序相關(guān)的中間語言代碼(例如,字節(jié)碼)裝載進(jìn)運(yùn)行時間環(huán)境22(方框50)。然后,該JIT編譯器24判定是否所裝載的應(yīng)用程序已進(jìn)入永久高速緩沖存儲器30(也就是,與應(yīng)用程序相關(guān)的一個或多個本機(jī)碼部分先前已被存儲進(jìn)永久高速緩沖存儲器30中)(方框52)。為進(jìn)行該判定,JIT編譯器24可以檢查標(biāo)識符列表(它可以是在下面圖3和圖4中描述所產(chǎn)生的),該列表與具有一些或所有存儲在永久高速緩沖存儲器30中的本機(jī)碼的應(yīng)用程序相關(guān),以判定是否與上述應(yīng)用程序相關(guān)的標(biāo)識符是否存在于列表中,從而,判定其是否存儲在永久高速緩沖存儲器30中。如果JIT編譯器24判定將被執(zhí)行的應(yīng)用程序還沒有進(jìn)入永久高速緩沖存儲器30中(方框52),則JIT編譯24和永久高速緩沖存儲器引擎28相互作用以為在永久高速緩沖存儲器中的應(yīng)用程序創(chuàng)建并存儲項目(方框54)。如結(jié)合圖3和圖4而更詳細(xì)描述的,該項目可以包括可用于與應(yīng)用程序相關(guān)的結(jié)構(gòu)信息、檢索信息的標(biāo)識符。另一方面,如果JIT編譯器24確定上述應(yīng)用程序已經(jīng)進(jìn)入永久高速緩沖存儲器30中(方框52),則隨后JIT編譯器24判定對應(yīng)于待執(zhí)行方法的本機(jī)碼是否在此時存儲在JITIMC26中(方框56)。如果用于當(dāng)前方法(也就是,所要執(zhí)行的方法,其執(zhí)行至少一部分當(dāng)前裝載的應(yīng)用程序)的本機(jī)碼已被裝載進(jìn)JITIMC26中,則運(yùn)行時間環(huán)境22執(zhí)行該本機(jī)碼(方框58)。在執(zhí)行與當(dāng)前方法相關(guān)的本機(jī)碼之后,JIT編譯器24判定應(yīng)用程序中需要被執(zhí)行的下一個方法(方框60)并把運(yùn)行時間環(huán)境22控制返回到方框56。如果JIT編譯器24確定用于當(dāng)前方法的本機(jī)碼沒有存儲在JITIMC26中(方框56),或用于應(yīng)用程序的新項目如果恰好剛存儲在永久高速緩沖存儲器30中(方框54),該JIT編譯器24請求永久高速緩沖存儲器引擎28確定是否用于當(dāng)前方法的本機(jī)碼存儲在永久高速緩沖存儲器30中(方框62)。如果永久高速緩沖存儲器引擎28確定用于當(dāng)前方法的本機(jī)碼沒有存儲在永久高速緩沖存儲器30中(方框62),則JIT編譯器24把該方法(也就是,相應(yīng)于該方法的中間語言指令)編譯成本機(jī)碼并存儲新產(chǎn)生的本機(jī)碼到JITIMC26中(方框66)。然后該JIT編譯器24請求新產(chǎn)生的本機(jī)碼存儲在永久高速緩沖存儲器30中的永久高速緩沖存儲器引擎28(方框68)。一旦新產(chǎn)生的本機(jī)碼已被存儲在永久高速緩沖存儲器30中,則本機(jī)碼被執(zhí)行(方框58)且JIT編譯24選擇下一個將被執(zhí)行的方法(方框60)。如果用于當(dāng)前方法的本機(jī)碼存儲在永久高速緩沖存儲器30中(方框62),JIT編譯器24請求永久高速緩沖存儲器引擎28從永久高速緩沖存儲器30中檢索本機(jī)碼(方框70)。該JIT編譯器24從永久高速緩沖存儲器引擎28接收被請示的本機(jī)碼并更新(例如,儲存)在JITIMC26中的本機(jī)碼(方框72)。例如,JIT編譯器24可用v表格(vtable)或任意適用的數(shù)據(jù)結(jié)構(gòu)類型來存儲從永久高速緩沖存儲器引擎28中接收到的本機(jī)碼。在JIT編譯器24采用新檢索到的本機(jī)碼(方框72)更新JITIMC26后,執(zhí)行新檢索到的本機(jī)碼(方框58)。然后該JIT編譯器60選擇將被執(zhí)行的下一個方法(方框60)并將運(yùn)行時間環(huán)境22的控制返回方框56。因為任意給出的本機(jī)碼部分可同時駐留在JITIMC26和永久高速緩沖存儲器30中,需要保持JITIMC26和永久高速緩沖存儲器30間的高速緩沖存儲器的一致性或完整性。因此,如果修改了一個應(yīng)用程序,則圖示的JIT編譯器24將應(yīng)用程序的修改版本作為新的應(yīng)用程序,以使得可采用(例如)圖2所示的技術(shù)在永久高速緩沖存儲器30中儲存對修改應(yīng)用程序的登錄(方框54)。結(jié)果,當(dāng)修改的應(yīng)用程序由運(yùn)行時間環(huán)境22執(zhí)行時,JIT編譯器24編譯應(yīng)用程序的方法(例如,按照按需訪問的策略(as-neededbasis)),以產(chǎn)生存儲在永久高速緩沖存儲器30中的這些方法的本機(jī)碼序列。永久高速緩沖存儲器配置管理器32較佳地從永久高速緩沖存儲器30中移除或廢除最近修改的應(yīng)用程序的先前或舊有的登錄。作為選擇,應(yīng)用程序的修改并不必然會創(chuàng)建新的登錄并重新產(chǎn)生存儲在永久高速緩沖存儲器30中的應(yīng)用程序的本機(jī)碼。替換地,可將JIT編譯器24和永久高速緩沖存儲器引擎28配置成只JIT編譯由以某種方式已被修改的應(yīng)用程序組成的那些方法。在那種情況下,只有更新的本機(jī)碼存儲在永久高速緩沖存儲器30中。但是,只更新已被修改并且存儲在永久高速緩沖存儲器30中的應(yīng)用程序的那些本機(jī)碼部分將要求使用幾個參數(shù),例如包括應(yīng)用程序最后被編譯的時間,版本號,或任意其它適用于查找并更新存儲在永久高速緩沖存儲器30中的本機(jī)碼的信息。較佳地,保護(hù)永久高速緩沖存儲器30,防止未授權(quán)者查看和/或修改其內(nèi)容。例如,如果永久高速緩沖存儲器30未被保護(hù),未授權(quán)者可能查看其中的信息(例如,平臺或計算機(jī)系統(tǒng)18的配置),從而使惡意代碼(例如,蠕蟲病毒等)的下載難以被察覺和/或移除。為保護(hù)永久高速緩沖存儲器30,可使用物理和/或基于軟件的數(shù)據(jù)分區(qū)方法。例如,當(dāng)永久高速緩沖存儲器30是硬盤時,硬盤驅(qū)動器的一個分區(qū)(例如,塊或扇區(qū)范圍)需接受安全措施并被永久高速緩沖存儲器30單獨(dú)使用,而硬盤驅(qū)動器的另一個分區(qū)不需要這樣的安全措施。由于永久高速緩沖存儲器30能夠存儲比JITIMC26多得多的信息(例如,由平臺或計算機(jī)系統(tǒng)18執(zhí)行的一個或更多的應(yīng)用程序相關(guān)的本機(jī)碼),永久高速緩沖存儲器30能夠用于產(chǎn)生審計索引信息。例如,存儲在永久高速緩沖存儲器30中的信息能夠用來收集執(zhí)行統(tǒng)計,生成與由計算機(jī)系統(tǒng)18執(zhí)行的一個或多個應(yīng)用程序有關(guān)的登錄報告,等等。圖3是示范方法的流程圖,在其中,可設(shè)置圖1所示的永久高速緩沖存儲器28,以生成在永久高速緩沖存儲器30中存儲的本機(jī)碼唯一標(biāo)識符。當(dāng)編譯與應(yīng)用程序關(guān)聯(lián)的方法時,JIT編譯器24將方法名稱(方框100)、該方法所屬的類型名稱(方框102)和該應(yīng)用程序名稱(方框104)傳給永久高速緩沖存儲器引擎28。這個信息最好作為字符串?dāng)?shù)據(jù)傳送給永久高速緩沖存儲器28。不過,可用其它數(shù)據(jù)類型替代。然后,永久高速緩沖存儲器引擎28從計算機(jī)系統(tǒng)18中的網(wǎng)絡(luò)接口插件(未示出)取得媒體訪問控制(MAC)地址(方框106),并將其與從方框100-106取得的字符串?dāng)?shù)據(jù)耦接以形成單個字符串(方框108)。接著,將耦接好的字符串用于生成混列碼(方框110),該混列碼用作標(biāo)識符或密鑰用于組織并檢索存儲在永久高速緩沖存儲器30中的本機(jī)碼數(shù)據(jù)。圖4所示的偽碼代表了一種可生成偽碼的示例方法。如圖4所示,變量“hashCode”預(yù)置為零,并定義字符串變量“stringData”。然后,在迭代循環(huán)中計算混列碼(例如,存儲在變量“hashCode”中的值),所述迭代循環(huán)將當(dāng)前的混列碼值乘以31,并將變量“stringData”的整數(shù)部分加到當(dāng)前的混列碼。迭代循環(huán)執(zhí)行的次數(shù)等于由“stringData”表示的字符串字符長度。圖5是可用于實現(xiàn)這里所述的裝置和方法的示例處理器系統(tǒng)120的方框圖。如圖5所示,處理器系統(tǒng)120包括耦接到互連總線或網(wǎng)絡(luò)124的處理器122。處理器122可為任意適宜的處理器、處理單元或微處理器,諸如IntelItanium系列、IntelX-Scale系列、IntelPentium系列等。雖然在圖5中沒有示出,系統(tǒng)120可以是多處理器系統(tǒng),因此可包括一個或多個與處理器122相同或相似并且耦接到互連總線或網(wǎng)絡(luò)124的附加處理器。圖5中的處理器122耦接到芯片組128,芯片組包括存儲控制器130和輸入/輸出(I/O)控制器132。眾所周知,芯片組一般提供了I/O和存儲管理功能、以及多個通用和/或?qū)S眉拇嫫鳌r鐘等,可由耦接到芯片組的一個或多個處理器訪問或使用。存儲控制器130執(zhí)行使處理器(如果是多個處理器則為處理器組)訪問系統(tǒng)存儲器134的功能,它可包括所需的任意類型的易失存儲器,諸如,靜態(tài)隨機(jī)存儲器(SRAM),動態(tài)隨機(jī)存儲器(DRAM)等。如上所述,系統(tǒng)存儲器134可用于實現(xiàn)JITIMC26。I/O控制器132執(zhí)行使處理器122通過I/O總線140與外圍輸入/輸出(I/O)裝置136通信的功能。I/O裝置136和138可以是任意所需類型的I/O裝置,諸如,鍵盤、視頻顯示器或監(jiān)視器、鼠標(biāo)等。當(dāng)然,I/O裝置136和138可以包括用來實現(xiàn)永久高速緩存30的海量儲存設(shè)備(例如,磁盤驅(qū)動器)。雖然存儲控制器130和I/O控制器132在圖5中描述為芯片組128中的分離功能模塊,由這些模塊執(zhí)行的功能可集成到單個半導(dǎo)體電路中或可使用兩個或更多的分離集成電路來實現(xiàn)。雖然在這里描述了一些方法和裝置,本專利申請所覆蓋的范圍并不限于此。相反,本專利申請覆蓋了所有落入附加權(quán)利要求的文字表述或其等同原則范圍中的實施例。權(quán)利要求1.一種高速緩存機(jī)器代碼的方法,其特征在于,包括接收即時編譯器中的中間語言代碼;即時編譯中間語言代碼以生成機(jī)器代碼;將機(jī)器代碼存儲到運(yùn)行時間環(huán)境中的非永久高速緩存中;及將機(jī)器代碼存儲到與運(yùn)行時間環(huán)境耦接的永久高速緩存。2.如權(quán)利要求1所述的方法,其特征在于,所述接收即時編譯器中的中間語言代碼包括接收與java虛擬計算機(jī)和通用語言運(yùn)行時間之一關(guān)聯(lián)的編譯器中的字節(jié)碼。3.如權(quán)利要求1所述的方法,其特征在于,所述將機(jī)器代碼存儲到非永久高速緩存包括將機(jī)器代碼存儲到即時存儲器中(存儲器內(nèi))高速緩存中。4.如權(quán)利要求1所述的方法,其特征在于,所述將機(jī)器代碼存儲到非永久高速緩存包括將機(jī)器代碼存儲到與java虛擬計算機(jī)和通用語言運(yùn)行時間之一關(guān)聯(lián)的高速緩存中。5.如權(quán)利要求1所述的方法,其特征在于,所述將機(jī)器代碼存儲到永久高速緩存包括將機(jī)器代碼存儲到海量儲存設(shè)備。6.如權(quán)利要求5所述的方法,其特征在于,所述海量儲存設(shè)備包括磁盤驅(qū)動器。7.如權(quán)利要求1所述的方法,其特征在于,將機(jī)器代碼存儲到與運(yùn)行時間環(huán)境耦接的永久高速緩存中包括為機(jī)器代碼生成標(biāo)識符并將機(jī)器代碼存儲到與標(biāo)識符關(guān)聯(lián)的永久高速緩存中。8.如權(quán)利要求7所述的方法,其特征在于,為機(jī)器代碼生成標(biāo)識符包括使用與機(jī)器代碼關(guān)聯(lián)的字符串信息生成標(biāo)識符。9.一種用于高速緩存機(jī)器代碼的系統(tǒng),其特征在于,包括具有即時編譯器和永久高速緩存引擎的運(yùn)行時間環(huán)境;及與運(yùn)行時間環(huán)境耦接的永久高速緩存。10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述運(yùn)行時間環(huán)境基于java虛擬計算機(jī)和通用語言運(yùn)行時間之一。11.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述運(yùn)行時間環(huán)境寄宿了在計算機(jī)系統(tǒng)中執(zhí)行的操作系統(tǒng)。12.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述永久高速緩存包括磁盤驅(qū)動器。13.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述即時編譯器和永久高速緩存引擎共同產(chǎn)生標(biāo)識符并在與標(biāo)識符關(guān)聯(lián)的永久高速緩存中存儲本機(jī)碼。14.如權(quán)利要求13所述的系統(tǒng),其特征在于,所述標(biāo)識符基于與本機(jī)碼關(guān)聯(lián)的字符串信息。15.如權(quán)利要求9所述的系統(tǒng),其特征在于,還包括永久高速緩存配置管理器。16.一種計算機(jī)系統(tǒng),其特征在于,包括海量儲存設(shè)備;及與海量儲存設(shè)備耦接的處理器,對其編程以用來接收即時編譯器中的中間語言代碼;即時編譯中間語言代碼以生成機(jī)器代碼;將機(jī)器代碼存儲到與即時編譯器關(guān)聯(lián)的高速緩存中;及在海量儲存設(shè)備上存儲機(jī)器代碼。17.如權(quán)利要求16所述的計算機(jī)系統(tǒng),其特征在于,所述中間語言代碼包括java字節(jié)碼,且即時編譯器與java虛擬計算機(jī)和通用語言運(yùn)行時間之一關(guān)聯(lián)。18.如權(quán)利要求16所述的計算機(jī)系統(tǒng),其特征在于,所述與即時編譯器關(guān)聯(lián)的高速緩存是存儲器中(存儲器內(nèi))高速緩存。19.如權(quán)利要求16所述的計算機(jī)系統(tǒng),其特征在于,所述海量儲存設(shè)備包括磁盤驅(qū)動器。20.如權(quán)利要求16所述的計算機(jī)系統(tǒng),其特征在于,所述處理器被編程以生成標(biāo)識符,并在與標(biāo)識符關(guān)聯(lián)的海量存儲設(shè)備上存儲機(jī)器代碼。21.如權(quán)利要求20所述的計算機(jī)系統(tǒng),其特征在于,所述處理器被編程以生成標(biāo)識符,所述標(biāo)識符使用與機(jī)器代碼關(guān)聯(lián)的字符串信息。22.一種具有在其上存儲的數(shù)據(jù)的機(jī)器可訪問介質(zhì),當(dāng)執(zhí)行時,使機(jī)器接收即時編譯器中的中間語言代碼;即時編譯中間語言代碼以生成機(jī)器代碼;將機(jī)器代碼存儲到運(yùn)行時間環(huán)境中的非永久高速緩存中;及將機(jī)器代碼存儲到與運(yùn)行時間環(huán)境耦接的永久高速緩存。23.如權(quán)利要求22所述的機(jī)器可訪問介質(zhì),具有在其上存儲數(shù)據(jù),當(dāng)執(zhí)行時,通過把機(jī)器代碼存儲在運(yùn)行時間環(huán)境中的即時存儲器中(存儲器內(nèi))高速緩存中,使機(jī)器把機(jī)器代碼存儲在非永久高速緩存中。24.如權(quán)利要求22所述的機(jī)器可訪問介質(zhì),具有在其上存儲數(shù)據(jù),當(dāng)執(zhí)行時,通過為機(jī)器代碼生成標(biāo)識符并且根據(jù)所述標(biāo)識符將機(jī)器代碼存儲到永久高速緩存中,使機(jī)器把機(jī)器代碼存儲在永久高速緩存中。25.一種執(zhí)行軟件應(yīng)用程序的方法,其特征在于,包括為軟件應(yīng)用程序的執(zhí)行選擇一種方法;判定是否用于該方法的機(jī)器代碼存儲在即時編譯器存儲器中(存儲器內(nèi))高速緩存中;判定是否用于該方法的機(jī)器代碼存儲在永久高速緩存中;及執(zhí)行該方法的所述機(jī)器代碼。26.如權(quán)利要求25所述的方法,其特征在于,還包括即時編譯所述方法,以根據(jù)機(jī)器代碼未被存儲在永久高速緩存中的判定生成機(jī)器代碼;將機(jī)器代碼存儲到即時編譯器存儲器中(存儲器內(nèi))高速緩存中;及將機(jī)器代碼存儲到永久高速緩存中。27.如權(quán)利要求25所述的方法,其特征在于,還包括從永久高速緩存中檢索機(jī)器代碼;及更新即時編譯器存儲器中(存儲器內(nèi))高速緩存以包括機(jī)器代碼。28.如權(quán)利要求27所述的方法,其特征在于,更新即時編譯器存儲器中(存儲器內(nèi))高速緩存包括更新與存儲器中(存儲器內(nèi))高速緩存關(guān)聯(lián)的v表格(vtable)。29.如權(quán)利要求25所述的方法,其特征在于,還包括判定是否用于軟件應(yīng)用程序的登錄被包含在永久高速緩存中。30.如權(quán)利要求29所述的方法,其特征在于,還包括根據(jù)永久高速緩存未包含用于軟件應(yīng)用程序的登錄的判定,創(chuàng)建用于永久高速緩存中的軟件應(yīng)用程序的登錄。31.一種用于執(zhí)行軟件應(yīng)用程序的系統(tǒng),其特征在于,包括永久高速緩存;非永久高速緩存;及耦接到永久高速緩存和非永久高速緩存的處理器,其被編程以為軟件應(yīng)用程序的執(zhí)行選擇一種方法;判定是否用于該方法的機(jī)器代碼被存儲在非永久高速緩存中;判定是否用于該方法的機(jī)器代碼被存儲在永久高速緩存中;及用于執(zhí)行該方法的所述機(jī)器代碼。32.如權(quán)利要求31所述的系統(tǒng),其特征在于,所述處理器被編程以根據(jù)機(jī)器代碼未被儲存在永久高速緩存中的判定,即時編譯所述方法以生成機(jī)器代碼;在非永久高速緩存中存儲機(jī)器代碼;及在永久高速緩存中存儲機(jī)器代碼。33.如權(quán)利要求31所述的系統(tǒng),其特征在于,所述處理器被編程以從永久高速緩存中檢索機(jī)器代碼并更新非永久高速緩存以包含機(jī)器代碼。34.一種具有在其上存儲的數(shù)據(jù)的機(jī)器可訪問介質(zhì),當(dāng)執(zhí)行時,使機(jī)器為軟件應(yīng)用程序的執(zhí)行選擇一種方法;判定是否用于該方法的機(jī)器代碼存儲在非永久高速緩存中;判定是否用于該方法的機(jī)器代碼存儲在永久高速緩存中;及用于執(zhí)行該方法所述機(jī)器代碼。35.如權(quán)利要求34所述的機(jī)器可訪問介質(zhì),其特征在于,機(jī)器可訪問介質(zhì)具有在其上存儲的數(shù)據(jù),當(dāng)執(zhí)行時,使機(jī)器根據(jù)機(jī)器代碼未存儲在永久高速緩存中的判定,即時編譯所述方法以生成機(jī)器代碼;將機(jī)器代碼存儲在非永久高速緩存中;及將機(jī)器代碼存儲在永久高速緩存中。36.如權(quán)利要求34所述的機(jī)器可訪問介質(zhì),其特征在于,機(jī)器可訪問介質(zhì)具有在其上存儲的數(shù)據(jù),當(dāng)執(zhí)行時,使機(jī)器從永久高速緩存檢索機(jī)器代碼并更新非永久高速緩存以包含機(jī)器代碼。全文摘要描述了一種永久高速緩存裝置和方法。一種用于高速緩存機(jī)器代碼的裝置和方法,接收即時編譯器中的中間語言代碼并即時編譯中間語言代碼以生成機(jī)器代碼。所述裝置和方法把機(jī)器代碼存儲在運(yùn)行時間環(huán)境中的非永久高速緩存中,也把它存儲在與運(yùn)行時間環(huán)境耦接的永久高速緩存中。文檔編號G06F9/45GK1729453SQ200380107230公開日2006年2月1日申請日期2003年12月5日優(yōu)先權(quán)日2002年12月23日發(fā)明者M(jìn)·南加,R·M·豪爾申請人:英特爾公司