專利名稱:在具備解釋器和編譯器的混合式系統(tǒng)中用于無(wú)用存儲(chǔ)單元收集的被編譯激活框架內(nèi)的惰 ...的制作方法
發(fā)明
背景技術(shù):
領(lǐng)域本發(fā)明涉及用于計(jì)算機(jī)系統(tǒng)的編譯器。更具體地說(shuō),本發(fā)明涉及一種簡(jiǎn)化用于編譯激活的惰型標(biāo)記以便于無(wú)用存儲(chǔ)單元收集的方法和裝置。
背景技術(shù):
因特網(wǎng)呈指數(shù)的增長(zhǎng)部分是由計(jì)算機(jī)語(yǔ)言的發(fā)展、諸如由美國(guó)加利福尼亞州Palo Alto的太陽(yáng)微系統(tǒng)公司開(kāi)發(fā)的JAVATM程序設(shè)計(jì)語(yǔ)言的發(fā)展所推動(dòng)的。JAVA程序設(shè)計(jì)語(yǔ)言允許一個(gè)應(yīng)用軟件被編譯為一個(gè)模塊,該模塊包括不依賴平臺(tái)的字節(jié)代碼,其可以通過(guò)由很多不同的計(jì)算機(jī)系統(tǒng)組成的網(wǎng)絡(luò)被分配。因此任何計(jì)算機(jī)系統(tǒng)在擁有相應(yīng)的不依賴平臺(tái)的虛擬機(jī)如java虛擬機(jī)的情況下,均能夠執(zhí)行字節(jié)代碼。通過(guò)這種方式,單一一種形式的應(yīng)用軟件即可以容易地被許多不同的計(jì)算平臺(tái)分配和執(zhí)行。
當(dāng)以不依賴平臺(tái)的形式接收一個(gè)應(yīng)用軟件時(shí),該應(yīng)用軟件可以通過(guò)解釋器直接得到解釋,或者其可以被編譯為用于本計(jì)算平臺(tái)的本地體系結(jié)構(gòu)的機(jī)器碼。執(zhí)行本機(jī)代碼通常顯著快于解釋不依賴平臺(tái)的字節(jié)代碼。但是,本機(jī)代碼所占據(jù)的空間遠(yuǎn)大于相應(yīng)的字節(jié)代碼。某些“混合式”計(jì)算機(jī)系統(tǒng)既支持字節(jié)代碼的解釋,也支持被被編譯本機(jī)代碼的執(zhí)行。
不依賴平臺(tái)的虛擬機(jī)周期性地執(zhí)行無(wú)用存儲(chǔ)單元收集操作,以收回預(yù)先分配的已不再使用的存儲(chǔ)空間。在無(wú)用存儲(chǔ)單元收集操作期間,必須識(shí)別在堆棧上激活框架(activation frame)內(nèi)的指示字。傳統(tǒng)上,這是通過(guò)對(duì)當(dāng)前執(zhí)行的每種方法保持棧地圖(stack map),或者通過(guò)對(duì)于在每個(gè)激活框架中的每個(gè)值保持一個(gè)標(biāo)記、表示是否該值是一個(gè)引用類型或者基本類型來(lái)完成的。雖然對(duì)于每個(gè)值保持標(biāo)記便于更簡(jiǎn)單的無(wú)用存儲(chǔ)單元收集,但對(duì)于每個(gè)值保持標(biāo)記所帶來(lái)的開(kāi)銷會(huì)降低執(zhí)行速度。這可以通過(guò)下面的事實(shí)解釋很多方法從執(zhí)行到完成并非一定要通過(guò)無(wú)用存儲(chǔ)單元收集操作來(lái)查驗(yàn)。因此,對(duì)這些方法保持標(biāo)記所占用的時(shí)間基本上是被浪費(fèi)了。
此外,在“混合式”系統(tǒng)中,無(wú)用存儲(chǔ)單元收集操作典型地利用二種不同類型的激活框架工作,因?yàn)橛糜诒痪幾g方法的激活框架通常在結(jié)構(gòu)方面與用于被解釋方法的激活框架不同。請(qǐng)注意,一個(gè)用于某方法的被解釋版本的激活框架典型地大于一個(gè)相應(yīng)的用于該方法的被編譯版本的激活框架。這是因?yàn)橛糜诒唤忉尠姹镜募せ羁蚣芡ǔ0ǜ郊訑?shù)據(jù),如類型標(biāo)記,其占據(jù)更多的空間。因此,以二種不同類型的激活框架工作使無(wú)用存儲(chǔ)單元收集操作以及其他借助于激活框架直接處理的操作大幅地復(fù)雜化。
因此,需要這樣一種方法和裝置其便于供編譯激活用的類型標(biāo)記,而又沒(méi)有如上所述的問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)實(shí)施例提供了一種系統(tǒng),用于在被編譯激活框架中以惰性方式標(biāo)記類型值以便于無(wú)用存儲(chǔ)單元收集。這種系統(tǒng)以一種混合式環(huán)境工作,其既支持字節(jié)代碼的解釋,也支持被編譯本機(jī)代碼的執(zhí)行。當(dāng)接收到一個(gè)方法的調(diào)用時(shí),該系統(tǒng)在執(zhí)行棧上生成一個(gè)用于該方法的激活框架。如果該方法以被解釋的模式執(zhí)行,在執(zhí)行期間解釋器對(duì)于每個(gè)值在該激活框架中保持一個(gè)標(biāo)記。該標(biāo)記表示是否該值是一個(gè)引用類型或者基本類型。但是,如果該方法以被編譯模式執(zhí)行,則系統(tǒng)在激活框架中對(duì)于每個(gè)值分配用于標(biāo)記的空間,然而在執(zhí)行期間不在該標(biāo)記中進(jìn)行填充。這使得該標(biāo)記可以在將來(lái)需要時(shí)被填充。
在對(duì)這個(gè)實(shí)施例的變化中,在接收到一個(gè)方法調(diào)用之前,系統(tǒng)將該方法的字節(jié)代碼編譯為本機(jī)代碼,并在完成該任務(wù)時(shí),在該方法的激活框架中采集每個(gè)值的類型信息。該系統(tǒng)將此類型信息嵌入到與該方法有關(guān)的本機(jī)代碼中。
在對(duì)該實(shí)施例的進(jìn)一步變化中,該系統(tǒng)將該類型信息作為位向量嵌入,其中每一位指定是否在該激活框架中的相應(yīng)值是一個(gè)基本類型或者引用類型。
在對(duì)該實(shí)施例的另一種進(jìn)一步的變化中,該系統(tǒng)在本機(jī)代碼中的空指令的操作數(shù)中嵌入該位向量。
在對(duì)該實(shí)施例的再一種進(jìn)一步的變化中,該系統(tǒng)在本機(jī)代碼中調(diào)用其他方法或者運(yùn)行系統(tǒng)的指令之后的位置嵌入該位向量。
在對(duì)這個(gè)實(shí)施例的變化中,該系統(tǒng)執(zhí)行無(wú)用存儲(chǔ)單元收集操作。在該無(wú)用存儲(chǔ)單元收集操作期間,系統(tǒng)由本機(jī)代碼恢復(fù)類型信息,并且在該方法的激活框架中的標(biāo)記中存儲(chǔ)該類型信息。
在對(duì)該實(shí)施例的變化中,該系統(tǒng)對(duì)于以編譯模式執(zhí)行的方法和以解釋模式執(zhí)行的同樣方法生成在結(jié)構(gòu)上相同的激活框架。
圖1舉例說(shuō)明一個(gè)根據(jù)本發(fā)明實(shí)施例的計(jì)算裝置。
圖2舉例說(shuō)明一個(gè)根據(jù)本發(fā)明實(shí)施例的激活框架。
圖3舉例說(shuō)明一個(gè)根據(jù)本發(fā)明實(shí)施例的被解釋激活框架和被編譯激活框架。
圖4舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例由經(jīng)過(guò)編譯的代碼流恢復(fù)標(biāo)記信息的過(guò)程。
圖5是一個(gè)舉例說(shuō)明在根據(jù)本發(fā)明實(shí)施例的無(wú)用存儲(chǔ)單元收集期間恢復(fù)標(biāo)記信息過(guò)程的流程圖。
具體實(shí)施例方式
下面所提供的說(shuō)明為的是使所有本領(lǐng)域技術(shù)人員均可完成和使用本發(fā)明,且本說(shuō)明是以特定應(yīng)用及其需求的上下文形式提供的。對(duì)所公開(kāi)的實(shí)施例的各種各樣的修改,對(duì)于那些本領(lǐng)域技術(shù)人員來(lái)說(shuō)將是容易而明顯的,并且無(wú)需脫離本發(fā)明的精神和范圍,在此處提出的一般原理即可應(yīng)用于其他實(shí)施例和應(yīng)用中。因此,本發(fā)明不應(yīng)被限制在示出的實(shí)施例中,而是應(yīng)與符合在此處所公開(kāi)的原理和特點(diǎn)的最寬范圍一致。
在詳細(xì)說(shuō)明中描述的數(shù)據(jù)結(jié)構(gòu)和代碼被典型地存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上,該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是存儲(chǔ)供計(jì)算機(jī)系統(tǒng)用的代碼和/或數(shù)據(jù)的任何裝置或介質(zhì)。這包括但不局限于是磁性和光學(xué)存儲(chǔ)裝置,如磁盤(pán)驅(qū)動(dòng)器、磁帶、CD(光盤(pán))和DVD(數(shù)字多用途光碟或者數(shù)字視頻光碟),以及包含在傳輸媒介中的計(jì)算機(jī)指令信號(hào)(當(dāng)該信號(hào)被調(diào)制時(shí)有或者沒(méi)有載波)。例如,該傳輸媒介可以包括一個(gè)通信網(wǎng),如因特網(wǎng)。
計(jì)算裝置圖1舉例說(shuō)明一個(gè)計(jì)算裝置110,該計(jì)算裝置根據(jù)本發(fā)明的一個(gè)實(shí)施例耦合到開(kāi)發(fā)系統(tǒng)106。開(kāi)發(fā)系統(tǒng)106通??梢园ㄈ魏晤愋偷挠?jì)算機(jī)系統(tǒng),包括但不限于是基于微處理器、主計(jì)算機(jī)、數(shù)字信號(hào)處理器、便攜式計(jì)算裝置、個(gè)人管理器(personal organizer)、設(shè)備控制器、或處于一裝置內(nèi)的計(jì)算引擎的計(jì)算機(jī)系統(tǒng)。開(kāi)發(fā)系統(tǒng)106包括開(kāi)發(fā)單元108,其包括用于開(kāi)發(fā)不依賴平臺(tái)的應(yīng)用軟件的編程工具。這通常包括將來(lái)自源代碼形式的應(yīng)用軟件以一種不依賴于平臺(tái)的形式、如JAVA字節(jié)代碼進(jìn)行編譯。
開(kāi)發(fā)系統(tǒng)106經(jīng)通信鏈路112耦合到計(jì)算裝置110。計(jì)算裝置110可以包括任何類型的計(jì)算裝置或者系統(tǒng),包括但不限于主計(jì)算機(jī)系統(tǒng)、服務(wù)器計(jì)算機(jī)系統(tǒng)、個(gè)人計(jì)算機(jī)系統(tǒng)、工作站、便攜式計(jì)算機(jī)系統(tǒng)、袖珍型計(jì)算機(jī)系統(tǒng)、個(gè)人管理器或者設(shè)備控制器。計(jì)算裝置110還可以包括一個(gè)被嵌入在另一裝置如傳呼機(jī)、蜂窩電話、電視接收機(jī)、汽車或者用具內(nèi)的計(jì)算裝置。
通信鏈路112可以包括任何永久性或者暫時(shí)性類型的通信信道,其可用于從開(kāi)發(fā)系統(tǒng)106傳送數(shù)據(jù)到計(jì)算裝置110。這可以包括(但是不局限于)一個(gè)計(jì)算機(jī)網(wǎng)絡(luò),諸如以太網(wǎng)、無(wú)線通信鏈路或者電話線路。
計(jì)算裝置110包括用于存儲(chǔ)代碼和數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)器114。計(jì)算裝置110還包含虛擬機(jī)116,用于處理從數(shù)據(jù)存儲(chǔ)器114恢復(fù)的不依賴平臺(tái)的應(yīng)用。
在開(kāi)發(fā)過(guò)程期間,在開(kāi)發(fā)單元108內(nèi)建立一個(gè)類別文件(classfile)118。類別文件118包括在計(jì)算裝置110中執(zhí)行的不依賴平臺(tái)的應(yīng)用軟件的成分。例如,類別文件118可以包括與一個(gè)面向?qū)ο蟮念愊嚓P(guān)的方法和字段。值得注意的是,這些方法是使用不依賴平臺(tái)的字節(jié)代碼119指定的。
接下來(lái),類別文件118被從開(kāi)發(fā)單元108經(jīng)由通信鏈路112傳送到計(jì)算裝置110內(nèi)的數(shù)據(jù)存儲(chǔ)器114。這使虛擬機(jī)116可以執(zhí)行一種利用了類別文件118內(nèi)成分的應(yīng)用軟件。值得注意的是,虛擬機(jī)116通??梢园軌驁?zhí)行不依賴平臺(tái)的代碼的任何類型的虛擬機(jī),如由美國(guó)加利福尼亞州Palo Alto的太陽(yáng)微系統(tǒng)公司所開(kāi)發(fā)的JAVA VIRTUALMACHINETM(Sun,Sun Microsystems,Java和Java Virtual Machine是太陽(yáng)微系統(tǒng)公司在美國(guó)及其他國(guó)家的商標(biāo)或者注冊(cè)商標(biāo))。
虛擬機(jī)116包括對(duì)象堆122,用于存儲(chǔ)由在虛擬機(jī)116上執(zhí)行的代碼所操縱的對(duì)象。對(duì)象堆122還存儲(chǔ)被編譯的方法123。
虛擬機(jī)116還包括一個(gè)解釋器120,其解釋從數(shù)據(jù)存儲(chǔ)器114恢復(fù)的不依賴平臺(tái)的字節(jié)代碼119以便于程序執(zhí)行。在操作期間,當(dāng)字節(jié)代碼119被連續(xù)地讀進(jìn)解釋器120內(nèi)時(shí),解釋器120通常每次執(zhí)行一個(gè)字節(jié)代碼。
做為選擇,虛擬機(jī)可以使用編譯器121將方法進(jìn)行編譯,使其從字節(jié)代碼形式被編譯為本機(jī)代碼形式,從而產(chǎn)生被編譯的方法123,該被編譯的方法存儲(chǔ)在對(duì)象堆122中。
值得注意的是,一種被編譯的方法可以與來(lái)自一個(gè)相關(guān)激活記錄的信息一起,用于恢復(fù)該被編譯方法的一種解釋器等效代碼。做為選擇,該被編譯方法的解釋器等效代碼可以被再次從數(shù)據(jù)存儲(chǔ)器114恢復(fù)。因此,一種被編譯方法的解釋器等效代碼通??梢栽谌魏螘r(shí)候獲得。
虛擬機(jī)116包括運(yùn)行系統(tǒng)124。運(yùn)行系統(tǒng)124保持用于線程130-131的狀態(tài)信息。這種狀態(tài)信息分別包括執(zhí)行棧140-141。執(zhí)行棧140-141分別存儲(chǔ)線程130-131所執(zhí)行的方法的激活記錄。
運(yùn)行系統(tǒng)124既可使用解釋器120、也可使用從對(duì)象堆122接收的被編譯方法123執(zhí)行編碼。當(dāng)由虛擬機(jī)116調(diào)用一個(gè)方法時(shí),該系統(tǒng)首先確定是否該方法作為一個(gè)經(jīng)過(guò)解釋的方法被調(diào)用。如果是,則運(yùn)行系統(tǒng)124激活解釋器120。
而另一方面,如果系統(tǒng)確定該方法是作為一個(gè)經(jīng)過(guò)編譯的方法被調(diào)用,運(yùn)行系統(tǒng)124就執(zhí)行與該方法有關(guān)的被編譯的本機(jī)代碼。如果沒(méi)有可用的本機(jī)代碼,則可以通過(guò)激活編譯器121產(chǎn)生該本機(jī)代碼,該編譯器由字節(jié)代碼產(chǎn)生本機(jī)代碼指令。
虛擬機(jī)116還包括無(wú)用存儲(chǔ)單元收集器150,其周期性地從對(duì)象堆122收回未使用的存儲(chǔ)量。值得注意的是,無(wú)用存儲(chǔ)單元收集器150還可以將被編譯的方法移送到回收存儲(chǔ)器。
激活框架圖2舉例說(shuō)明一種根據(jù)本發(fā)明實(shí)施例的激活框架。激活框架200包含值204、208和212。激活框架200還包含說(shuō)明值204的標(biāo)記202,說(shuō)明值208的標(biāo)記206,以及說(shuō)明值212的標(biāo)記210。值204和212均是以其相應(yīng)標(biāo)記表示的基本值。值208則為以標(biāo)記206表示的引用類型。
被解釋和被編譯的激活框架圖3舉例說(shuō)明根據(jù)本發(fā)明實(shí)施例的一個(gè)被解釋激活框架和一個(gè)被編譯激活框架。被解釋激活框架300包含值306,其為以相應(yīng)的標(biāo)記304表示的引用類型。被解釋激活框架300還包含值310,其為以相應(yīng)的標(biāo)記308表示的基本類型。當(dāng)解釋字節(jié)代碼119(該字節(jié)代碼操作在被解釋激活框架300中的值)的時(shí)候,解釋器120以一種急迫方式(即盡可能快地更新它們)保持類型標(biāo)記。這確保了被解釋的激活框架300具有對(duì)于所有的值都有效的類型標(biāo)記。
被編譯激活框架302包含值314、318和322。被編譯激活框架302還包括說(shuō)明值314的標(biāo)記312,說(shuō)明值318的標(biāo)記316,以及說(shuō)明值322的標(biāo)記320。標(biāo)記312、316和320保持為空,且當(dāng)需要它們時(shí)被填充,諸如在無(wú)用存儲(chǔ)單元收集期間,或者在去優(yōu)化操作期間,如同由發(fā)明人Urs Hoize和Lars Bak在1997年10月6日申請(qǐng)、并在1999年8月3日頒布、名稱為“用于動(dòng)態(tài)地去優(yōu)化編譯的激活的方法和裝置”的美國(guó)專利No.5,933,635中所論述的。在此將該申請(qǐng)作為參考資料加以結(jié)合。如果在將來(lái)某時(shí)刻標(biāo)記被填充,那么被編譯激活框架302就變得實(shí)質(zhì)上與被解釋激活框架300相同,并且可通過(guò)同樣方式處理。
在一個(gè)被編譯的激活框架中填充標(biāo)記信息圖4舉例說(shuō)明按照本發(fā)明的一個(gè)實(shí)施例由被編譯的代碼流恢復(fù)標(biāo)記信息的過(guò)程。當(dāng)需用標(biāo)記312、316和320來(lái)確定值314、318和322是基本類型還是引用類型的時(shí)候,用于標(biāo)記的類型信息被從代碼流402中恢復(fù)。這是通過(guò)使用程序計(jì)數(shù)器400去識(shí)別與被編譯激活框架302有關(guān)方法的本機(jī)代碼在代碼流402中的位置來(lái)實(shí)現(xiàn)的。
在本發(fā)明的一個(gè)實(shí)施例中,代碼流402包括一個(gè)緊隨指令“調(diào)用foo”404的空指令406,其中指令“調(diào)用foo”404調(diào)用一個(gè)方法或者運(yùn)行系統(tǒng)。對(duì)應(yīng)于標(biāo)記312、316和320的值被存儲(chǔ)在空指令406的一個(gè)操作數(shù)中。
在本發(fā)明的另一實(shí)施例中,代碼流402包含對(duì)應(yīng)于標(biāo)記312、316和320的值,它們緊隨指令調(diào)用foo 404之后被存儲(chǔ)為32位字。在這個(gè)實(shí)施例中,在對(duì)foo的調(diào)用之后,對(duì)foo的調(diào)用返回一個(gè)4字節(jié)地址,使得執(zhí)行流跳過(guò)上述32位字。
值得注意的是,緊隨指令foo的32位字包含用于每個(gè)標(biāo)記的單個(gè)位,該位表示是否該標(biāo)記與一個(gè)引用類型有關(guān)。因此,32位字可以存儲(chǔ)高達(dá)32個(gè)標(biāo)記的信息。
在無(wú)用存儲(chǔ)單元收集操作期間恢復(fù)標(biāo)記信息圖5是一個(gè)舉例說(shuō)明根據(jù)本發(fā)明實(shí)施例的在無(wú)用存儲(chǔ)單元收集操作期間恢復(fù)標(biāo)記信息的過(guò)程的流程圖。該無(wú)用存儲(chǔ)單元收集操作開(kāi)始于遍歷執(zhí)行棧以定位根(root),根是進(jìn)入堆的基準(zhǔn),用于在堆中定位對(duì)象以便進(jìn)行無(wú)用存儲(chǔ)單元收集(步驟502)。接著,無(wú)用存儲(chǔ)單元收集操作使用程序計(jì)數(shù)器從被編譯的代碼流中恢復(fù)用于激活的類型標(biāo)記信息(步驟504)。一旦這一信息被恢復(fù),無(wú)用存儲(chǔ)單元收集操作就將該標(biāo)記信息插入處于激活框架中的適當(dāng)標(biāo)記內(nèi)(步驟506)。接著,無(wú)用存儲(chǔ)單元收集操作使用在激活框架中被識(shí)別的基準(zhǔn)而繼續(xù)進(jìn)行(步驟508)。注意,以上描述的在無(wú)用存儲(chǔ)單元收集操作期間恢復(fù)標(biāo)記信息的過(guò)程可以在一種所有方法均在執(zhí)行之前被編譯的系統(tǒng)中實(shí)現(xiàn),也可以在一種混合模式的系統(tǒng)中實(shí)現(xiàn)。
以上進(jìn)行本發(fā)明實(shí)施例的描述僅僅是為了舉例和描述。其用意并非是要窮舉或?qū)⒈景l(fā)明限制為所公開(kāi)的形式。因此,對(duì)于本領(lǐng)域?qū)I(yè)技術(shù)人員來(lái)說(shuō)許多的修改和變化將是顯而易見(jiàn)的。另外,以上所述的公開(kāi)并非是要限制本發(fā)明。本發(fā)明的范圍是由所附權(quán)利要求限定的。
權(quán)利要求
1.一種用于在被編譯激活框架中鍵入標(biāo)記值以便于無(wú)用存儲(chǔ)單元收集的方法,其中該方法工作于一種混合模式系統(tǒng)中,該混合模式系統(tǒng)既支持字節(jié)代碼的解釋,又支持被編譯本機(jī)代碼的執(zhí)行,該方法包括接收一個(gè)方法的調(diào)用;在執(zhí)行棧上生成一個(gè)用于該方法的激活框架;解釋字節(jié)代碼方法;其中如果該方法以被解釋模式被執(zhí)行,該解釋包括在執(zhí)行期間,在該激活框架中對(duì)于每個(gè)值保留一個(gè)標(biāo)記,其中一給定的標(biāo)記表示是否一給定值為引用類型或者基本類型;和其中如果該方法以被編譯模式被執(zhí)行,生成該激活框架包括在該激活框架中對(duì)于每個(gè)值分配用于標(biāo)記的空間,其中一給定的標(biāo)記表示是否一給定值為引用類型或者基本類型,借此,在該激活框架中將類型信息存儲(chǔ)進(jìn)該標(biāo)記的操作被推遲,直到發(fā)生一個(gè)后續(xù)的無(wú)用存儲(chǔ)單元收集操作為止。
2.根據(jù)權(quán)利要求1的方法,其中在接收對(duì)于方法的調(diào)用之前,該方法進(jìn)一步包括將該方法的字節(jié)代碼編譯為本機(jī)代碼;其中該編譯過(guò)程包括在該方法的激活框架中對(duì)于每個(gè)值采集類型信息;和將該類型信息嵌入到與該方法有關(guān)的該本機(jī)代碼中。
3.根據(jù)權(quán)利要求2的方法,其中將該類型信息嵌入到該本機(jī)代碼包括將該類型信息作為位向量存儲(chǔ),其中每個(gè)位規(guī)定是否在該激活框架中的一個(gè)對(duì)應(yīng)值為基本類型或者引用類型。
4.根據(jù)權(quán)利要求3的方法,其中該位向量被嵌入在該本機(jī)代碼中的空指令的操作數(shù)內(nèi)。
5.根據(jù)權(quán)利要求3的方法,其中該位向量被嵌入在該本機(jī)代碼中調(diào)用其他方法或者運(yùn)行系統(tǒng)的指令之后的位置上。
6.根據(jù)權(quán)利要求2的方法,進(jìn)一步包括執(zhí)行一個(gè)無(wú)用存儲(chǔ)單元收集操作,其中該無(wú)用存儲(chǔ)單元收集操作包括由該本機(jī)代碼恢復(fù)類型信息;和在該方法的激活框架中的該標(biāo)記中存儲(chǔ)該類型信息。
7.根據(jù)權(quán)利要求1的方法,其中當(dāng)以被編譯模式執(zhí)行時(shí)對(duì)于該方法生成的該激活框架和當(dāng)以被解釋模式執(zhí)行時(shí)對(duì)于該方法生成的該激活框架在結(jié)構(gòu)上是相同的。
8.一種存儲(chǔ)指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),當(dāng)由計(jì)算機(jī)執(zhí)行該指令的時(shí)候,使得該計(jì)算機(jī)去執(zhí)行一種用于在被編譯激活框架中鍵入標(biāo)記值以便于無(wú)用存儲(chǔ)單元收集的方法,其中該方法工作于一種混合模式系統(tǒng)中,該混合模式系統(tǒng)既支持字節(jié)代碼的解釋,又支持編譯本機(jī)代碼的執(zhí)行,該方法包括接收一個(gè)方法的調(diào)用;在該執(zhí)行棧上生成一個(gè)用于該方法的激活框架;解釋字節(jié)代碼方法;其中如果該方法以被解釋模式執(zhí)行,該解釋包括在執(zhí)行期間,在該激活框架中對(duì)于每個(gè)值保留一個(gè)標(biāo)記,其中一給定的標(biāo)記表示是否一給定值為引用類型或者基本類型;和其中如果該方法被以編譯模式執(zhí)行,生成該激活框架包括在該激活框架中對(duì)于每個(gè)值分配用于標(biāo)記的空間,其中一給定的標(biāo)記表示是否一給定值為引用類型或者基本類型,借此,在該激活框架中將類型信息存儲(chǔ)進(jìn)該標(biāo)記的操作被推遲,直到發(fā)生一個(gè)后續(xù)的無(wú)用存儲(chǔ)單元收集操作為止。
9.根據(jù)權(quán)利要求8的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中在接收對(duì)于方法的調(diào)用之前,該方法進(jìn)一步包括將該方法的字節(jié)代碼編譯為本機(jī)代碼;其中該編譯過(guò)程包括在該方法的激活框架中對(duì)于每個(gè)值采集類型信息;和將該類型信息嵌入到與該方法有關(guān)的該本機(jī)代碼中。
10.根據(jù)權(quán)利要求9的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中將該類型信息嵌入到該本機(jī)代碼包括將該類型信息作為位向量存儲(chǔ),其中每個(gè)位規(guī)定是否在該激活框架中的一個(gè)對(duì)應(yīng)值為基本類型或者引用類型。
11.根據(jù)權(quán)利要求10的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中該位向量被嵌入在該本機(jī)代碼中的空指令的操作數(shù)內(nèi)。
12.根據(jù)權(quán)利要求10的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中該位向量被嵌入在該本機(jī)代碼中調(diào)用其他方法或者運(yùn)行系統(tǒng)的指令之后的位置上。
13.根據(jù)權(quán)利要求9的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中該方法進(jìn)一步包括執(zhí)行一個(gè)無(wú)用存儲(chǔ)單元收集操作,其中該無(wú)用存儲(chǔ)單元收集操作包括由該本機(jī)代碼恢復(fù)類型信息;和在該方法的激活框架中的該標(biāo)記中存儲(chǔ)該類型信息。
14.根據(jù)權(quán)利要求8的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中當(dāng)以被編譯模式執(zhí)行時(shí)對(duì)于該方法生成的該激活框架和當(dāng)以被解釋模式執(zhí)行時(shí)對(duì)于該方法生成的該激活框架在結(jié)構(gòu)上是相同的。
15.一種用于在被編譯激活框架中鍵入標(biāo)記值以便于無(wú)用存儲(chǔ)單元收集的裝置,其中該裝置被配置為工作于一種混合模式系統(tǒng)中,該混合模式系統(tǒng)既支持字節(jié)代碼的解釋,又支持編譯本機(jī)代碼的執(zhí)行,該裝置包括接收裝置,其被配置用于接收方法的調(diào)用;生成裝置,其被配置用于在執(zhí)行棧上生成一個(gè)用于該方法的激活框架;解釋裝置,其被配置用于解釋字節(jié)代碼方法;其中如果該方法以被解釋模式執(zhí)行,該解釋機(jī)構(gòu)被配置用于在執(zhí)行期間,在該激活框架中對(duì)于每個(gè)值保留一個(gè)標(biāo)記,其中一給定的標(biāo)記表示是否一給定值為引用類型或者基本類型;和其中如果該該方法以被編譯模式執(zhí)行,該生成機(jī)構(gòu)被配置用于在該激活框架中對(duì)于每個(gè)值分配用于標(biāo)記的空間,其中一給定的標(biāo)記表示是否一給定值為引用類型或者基本類型,借此,在該激活框架中將類型信息存儲(chǔ)進(jìn)該標(biāo)記的操作被推遲,直到發(fā)生一個(gè)后續(xù)的無(wú)用存儲(chǔ)單元收集操作為止。
16.根據(jù)權(quán)利要求15的裝置,其中該裝置進(jìn)一步包括編譯裝置,其被配置用于將該方法的字節(jié)代碼編譯為本機(jī)代碼;其中該編譯裝置包括采集裝置,其被配置用于在該方法的激活框架中對(duì)于每個(gè)值采集類型信息;和嵌入裝置,其被配置用于將該類型信息嵌入到與該方法有關(guān)的該本機(jī)代碼中。
17.根據(jù)權(quán)利要求16的裝置,其中該嵌入機(jī)構(gòu)其被配置用于將該類型信息作為位向量存儲(chǔ),其中每個(gè)位規(guī)定是否在該激活框架中的一個(gè)對(duì)應(yīng)值為基本類型或者引用類型。
18.根據(jù)權(quán)利要求17的裝置,其中該位向量被嵌入在該本機(jī)代碼中的空指令的操作數(shù)中。
19.根據(jù)權(quán)利要求17的裝置,其中該位向量被嵌入在該本機(jī)代碼中調(diào)用其他方法或者運(yùn)行系統(tǒng)的指令之后的位置上。
20.根據(jù)權(quán)利要求16的裝置,進(jìn)一步包括無(wú)用存儲(chǔ)單元收集裝置,其中該無(wú)用存儲(chǔ)單元收集裝置包括恢復(fù)裝置,其被配置用于由該本機(jī)代碼恢復(fù)類型信息;和存儲(chǔ)裝置,其被配置用于在該方法的激活框架中的該標(biāo)記中存儲(chǔ)該類型信息。
21.根據(jù)權(quán)利要求15的裝置,其中當(dāng)以被編譯模式執(zhí)行時(shí)對(duì)于該方法生成的該激活框架和當(dāng)以被解釋模式執(zhí)行時(shí)對(duì)于該方法生成的該激活框架在結(jié)構(gòu)方面是相同的。
全文摘要
本發(fā)明的一個(gè)實(shí)施例提供了一種在被編譯激活框架中以惰性方式鍵入標(biāo)記值以便于無(wú)用存儲(chǔ)單元收集的系統(tǒng)。這個(gè)系統(tǒng)以一種混合式環(huán)境工作,其同時(shí)支持字節(jié)代碼的解釋和被編譯本機(jī)代碼的執(zhí)行。當(dāng)接收一個(gè)方法調(diào)用時(shí),該系統(tǒng)在該執(zhí)行棧上生成一個(gè)用于該方法的激活框架。如果該方法執(zhí)行于被解釋的模式,解釋器在執(zhí)行期間對(duì)于每個(gè)值在該激活框架中保持一個(gè)標(biāo)記。該標(biāo)記表示是否該值是一個(gè)引用類型或者基本類型。但是,如果該方法執(zhí)行于被編譯模式,該系統(tǒng)在該激活框架中對(duì)于每個(gè)值分配用于標(biāo)記的空間,但是在執(zhí)行期間不填充該標(biāo)記中。這允許該標(biāo)記在將來(lái)需要時(shí)被填充。
文檔編號(hào)G06F9/44GK1556951SQ02818625
公開(kāi)日2004年12月22日 申請(qǐng)日期2002年10月4日 優(yōu)先權(quán)日2001年11月14日
發(fā)明者K·倫德, K 倫德, L·巴克 申請(qǐng)人:太陽(yáng)微系統(tǒng)公司