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

實現(xiàn)快速子類和子類型檢查的方法與設(shè)備的制作方法

文檔序號:6416322閱讀:163來源:國知局
專利名稱:實現(xiàn)快速子類和子類型檢查的方法與設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明總體涉及基于對象的系統(tǒng)的對象之間關(guān)系的確定,更具體地說,本發(fā)明涉及對基于對象的系統(tǒng)中的對象有效地執(zhí)行子類型檢查。
許多基于對象的計算系統(tǒng)是這樣構(gòu)造的,其中的對象是定義了可用于對象的功能的特定類和子類的成員。在程序執(zhí)行期間,虛擬機一般涉及檢查對象之間的關(guān)系,以利程序的執(zhí)行。舉例來說,虛擬機可以檢查對象之間的子類或子類型關(guān)系。在有些程序設(shè)計語言、例如美國加州Palo Alto的Sun Microsystems公司開發(fā)的JavaTM程序設(shè)計語言中,程序設(shè)計語言內(nèi)的構(gòu)造涉及子類檢查。這種子類檢查一般涉及判斷某特定對象是否是給定類型的。就是說,檢查與程序關(guān)聯(lián)的類結(jié)構(gòu)以確定特定對象的類型。


圖1是一種常規(guī)類結(jié)構(gòu)的圖示。類結(jié)構(gòu)102是一個類分層結(jié)構(gòu),包括類106和子類110。一般來說,類106是一個抽象類,可以包含任意數(shù)量的子類110。如圖所示,子類“1”110a、子類“2”110b和子類“N”110c是類106的“直接”子類,而子類“A1”110d是子類“1”110a的直接子類。子類“A1”110d可看作是類106的間接子類,因為子類“A1”110d是子類“1”110a的子類,后者是類106的子類。
類106一般包括各種不同的函數(shù)(function)或過程(method)。每個子類110通常包括一個不同的函數(shù)集合。舉例來說,子類“1”110a一般包括專門用于作為子類“1”110a的一部分的對象的函數(shù)。作為類106的成員的對象實際上可以執(zhí)行與類106相關(guān)的所有函數(shù)。是任何子類110的成員的一個對象也是類106的成員。因此,是任何子類110的成員的一個對象也可以執(zhí)行與類106相關(guān)聯(lián)的所有函數(shù)。然而,是某特定子類例如子類“1”110a的成員的對象,卻不能執(zhí)行與不同的子類例如子類“2”110b相關(guān)聯(lián)的特定函數(shù)。因此,判斷某對象屬于哪個子類110,就能有效地確定該對象所能執(zhí)行的函數(shù)。
運行時可用一種窄投射(narrawing cast)來有效地將由類106定義的對象作為由子類“1”110a定義的對象來看待。然而,由于由類106定義的對象,可以由子類“2”110b定義而不是由子類“1”110a定義,一般要進(jìn)行檢查以確定將該對象與子類“1”110a關(guān)聯(lián)是否準(zhǔn)確。本領(lǐng)域的熟練人員會明白,關(guān)于某對象是否與子類“1”110a關(guān)聯(lián)的檢查,實際上就是判斷該對象是否至少與子類“1”110a關(guān)聯(lián)的檢查。換言之,與子類“A1”110d關(guān)聯(lián)的某對象一般會被確定為也與子類“1”110a關(guān)聯(lián)。
在JavaTM環(huán)境中,確定對象的子類型的函數(shù),例如is_subtype函數(shù),可以是靜態(tài)編碼的。盡管用來靜態(tài)編碼函數(shù)的方法會有所不同,一種常用的方法是采用一個二維位矩陣,其中位于(i,j)位置的一個位編碼is_subtype(ti,tj)的結(jié)果。采用這種矩陣,子類型檢查實際上涉及變址到矩陣去確定對象的子類型。然而,由于矩陣規(guī)模可能很大,并且由于一般要求的指令的位操作,所以子類型檢查的速度經(jīng)常很慢。
一般來說,為了確定某特定對象的子類型而進(jìn)行子類型檢查時,通常必須檢查一個類型的幾乎所有子類型,例如一個類的幾乎所有子類。在有些層次化類結(jié)構(gòu)中,例如圖1的類結(jié)構(gòu)102中,必須檢查的子類的數(shù)量會相對較多。例如,某些類可能具有數(shù)百個相關(guān)的子類。因此,當(dāng)有多個子類型時,例如在有用JavaTM程序設(shè)計語言定義的接口的情況下,子類型檢查的執(zhí)行效率通常不高。就是說,當(dāng)有多個子類型時,檢查每個子類型一般都很費時,正如上文所述。此外,在使用多個繼承層(inheritance layer)的系統(tǒng)例如C++程序設(shè)計語言定義的系統(tǒng)中執(zhí)行子類型檢查經(jīng)常也效率不高。對于有多個繼承層的系統(tǒng)來說,有效地執(zhí)行子類型檢查一般有困難,因為必須檢查每個繼承層。
有效地執(zhí)行子類型檢查是重要的,因為檢查可能頻繁地發(fā)生。在程序執(zhí)行期間頻繁發(fā)生檢查時,與檢查相關(guān)聯(lián)的開銷就會相對較高。在有些情況下,一個運行時子類型檢查或測試,可能要求相當(dāng)于大約8條指令量級的開銷,本領(lǐng)域的熟練人員知道,這對于整體程序來說是相當(dāng)大的開銷,在重復(fù)進(jìn)行運行時子類型檢查時尤其如此。因此,程序執(zhí)行的速度由于頻繁的子類型檢查而受抵銷。
一般來說,當(dāng)在程序執(zhí)行期間進(jìn)行子類型檢查時,實際上所有與程序關(guān)聯(lián)的類和過程都必須是已知的。通常要構(gòu)造數(shù)據(jù)結(jié)構(gòu)來列舉所有與程序關(guān)聯(lián)的類和過程,以便這些類和過程處于準(zhǔn)備好被存取的狀態(tài)。換言之,子類型檢查中所用的數(shù)據(jù)結(jié)構(gòu)通常必須在程序執(zhí)行之前計算出來。這種數(shù)據(jù)結(jié)構(gòu)通常相當(dāng)大,耗費相當(dāng)多的系統(tǒng)資源。所有與程序關(guān)聯(lián)的類和過程都必須是已知的這個要求,是與采用動態(tài)連接或動態(tài)類加載的系統(tǒng)不兼容的,因為動態(tài)連接允許與程序關(guān)聯(lián)的類和過程有效地改變。如果不能采用動態(tài)連接,程序的功能就會受到影響。在采用動態(tài)連接的環(huán)境中,每次進(jìn)行涉及類加載的操作后,數(shù)據(jù)結(jié)構(gòu)一般都要重新計算,這就耗費時間,因而效率不高。
因此,需要一種提高子類型檢查效率的方法和裝置。更特別地,需要一種提高子類型檢查效率、并且每次類加載操作后不要求重新計算數(shù)據(jù)結(jié)構(gòu)的方法和裝置。
本發(fā)明披露在程序執(zhí)行期間進(jìn)行快速子類型檢查的方法和裝置。根據(jù)本發(fā)明的一個方面,快速有效地確定作為與基于對象的計算系統(tǒng)一部分的對象相關(guān)聯(lián)的類型的方法,包括從與一個類(該類與該對象相關(guān)聯(lián))相關(guān)聯(lián)的動態(tài)存儲位置獲取一個候選類型,將候選類型與潛在地與該候選類型相同的第一個類型作比較。然后判斷候選類型實際上是否等于第一個類型。如果確定候選類型實際上等于第一個類型,就提供一個表示候選類型實際上等于第一個類型的指示。
根據(jù)本發(fā)明的另一個方面,安排一個計算機系統(tǒng)來確定駐留在計算機系統(tǒng)上的第一個對象相關(guān)聯(lián)的類型。計算機系統(tǒng)包括處理器、內(nèi)存和將候選類型裝入內(nèi)存的加載機構(gòu)。候選類型是從與第一個對象關(guān)聯(lián)的類對象獲取的。計算機系統(tǒng)還包括一個將候選類型與第一個類型比較的比較機構(gòu),一個能確定候選類型是否實際上等于第一個類型的判斷機構(gòu)。計算機系統(tǒng)中有一個指示器,用于在確定候選類型實際上等于第一個類型時,提供一個表示候選類型實際上等于第一個類型的指示。
根據(jù)本發(fā)明再另一個方面,對屬于一個特定類的成員的對象執(zhí)行子類型檢查的方法,包括從與該特定類相關(guān)聯(lián)的某位置獲取一個存儲單元。該存儲單元包括潛在地與該對象相關(guān)聯(lián)的第一個子類型的有關(guān)信息。該方法還包括判斷存儲單元所含信息是否和與該對象相關(guān)聯(lián)的實際子類型有關(guān),并且在存儲單元與實際類型有關(guān)時提供一個表示存儲單元所含信息與實際子類型有關(guān)的指示。在一個實施例中,該方法還在存儲單元所含信息與實際子類型無關(guān)時,判斷對象的實際子類型,并將與實際子類型相關(guān)的信息存儲到該特定類的關(guān)聯(lián)位置。
通過閱讀以下的詳細(xì)說明,研究各種附圖,能更好理解本發(fā)明。
參考以下結(jié)合附圖的說明,就能理解用具體實施例闡示的本發(fā)明。各附圖簡介如下圖1是一種常規(guī)類分層結(jié)構(gòu)的圖示。
圖2a是表示按照本發(fā)明的實施例,判斷某對象是否是特定類型的子類型的相關(guān)步驟的流程圖。
圖2b是表示按照本發(fā)明的實施例,將一個類型與一個所加載的高速緩存比較-即圖2a的步驟208的相關(guān)步驟的流程圖。
圖2c是表示按照本發(fā)明的一個實施例,具有一個高速緩存單元的類的圖示。
圖3是適于實現(xiàn)本發(fā)明的計算機系統(tǒng)的圖示。
圖4是按照本發(fā)明一個實施例的虛擬機的圖示。
一般來說,判定對象之間子類型關(guān)系所執(zhí)行的子類型檢查要占用相當(dāng)多的計算機內(nèi)存空間。要求占用這個空間的,是與執(zhí)行子類型檢查相關(guān)的指令,以及預(yù)先計算的、通常用于存儲所有與計算機程序的執(zhí)行相關(guān)的所有類型和過程的數(shù)據(jù)結(jié)構(gòu)。子類型檢查要求占用的空間,以及執(zhí)行反復(fù)的子類型檢查所需開銷,經(jīng)常影響程序執(zhí)行的速度。
通過保存子類型檢查的預(yù)期結(jié)果,可以有效地減少執(zhí)行子類型檢查相關(guān)的開銷量。具體來說,運行時,在首次要將與某對象關(guān)聯(lián)的子類型針對某特定類型進(jìn)行檢查時,實際上可以采用任何方法來進(jìn)行實際的檢查,本領(lǐng)域的熟練人員是清楚這一點的。因為隨后對相同類的對象進(jìn)行的檢查可能得出相同的子類型結(jié)果,所以保存實際檢查結(jié)果,例如首次檢查的計算結(jié)果,會顯著降低與進(jìn)行子類型檢查相關(guān)的開銷。換言之,這是一種動態(tài)子類型檢查機制,它采用高速緩存技術(shù),允許將以前的子類型檢查結(jié)果高速緩存起來,隨后在執(zhí)行同樣的檢查時,如果判定所高速緩存的值正確即適當(dāng)?shù)脑捑驮试S使用高速緩存的值,從而加快同樣檢查的速度。在一個實施例中,高速緩存的數(shù)據(jù)可以被保存在正被測試或檢查的值-例如對象-的類型描述符中。
在執(zhí)行了確定與某個類關(guān)聯(lián)的某對象“S”的子類型的初始檢查之后,初始檢查的結(jié)果被存儲起來。由于存儲了初始子類型檢查的結(jié)果,下一次要求檢查確定對象“S”的子類型時,存儲的結(jié)果就能使相同的子類型檢查的進(jìn)行速度加快。舉例來說,當(dāng)要將對象“S”的子類型對照類型“T”作檢查時,即要判斷對象“S”是否屬于類型“T”時,就能相對快速地將與對象“S”關(guān)聯(lián)的存儲的類型描述符與子類型“T”進(jìn)行比較。如果對象“S”的類型等于子類型“T”,則認(rèn)為比較結(jié)果是成功的,一般就不再要求進(jìn)行常規(guī)的子類型檢查。因此可避免與一個常規(guī)子類型檢查相關(guān)的開銷。另一方面,如果對象“S”的類型不等于子類型“T”,則要用常規(guī)的子類型檢查來確定對象“S”的類型。在某些情況中,這種檢查要遍歷一個類層次結(jié)構(gòu)以定位適當(dāng)?shù)淖宇愋?,如果找不到適當(dāng)?shù)淖宇愋?,就產(chǎn)生一個異常。
參見圖2a,現(xiàn)在來說明按照本發(fā)明的實施例,判斷某對象是否是特定類型的子類型或子類的相關(guān)步驟。下面具體說明判斷某對象是不是類型B的子類型的流程。判斷某對象是不是類型B的子類型的流程202始于步驟204,該步驟將對象的類型,例如類,裝入與計算機系統(tǒng)相關(guān)的寄存器。本領(lǐng)域的熟練人員明白,對象的總類即抽象類是已知的。一旦對象的類被裝入寄存器,然后在步驟206,加載的類的高速緩存單元就被加載,例如加載到計算機內(nèi)存。下文將結(jié)合圖2c來說明高速緩存單元或高速緩存。
高速緩存被加載后,在步驟208,將類型B對照該加載的高速緩存進(jìn)行比較。將類型B與加載的高速緩存比較的相關(guān)步驟將在下文結(jié)合圖2b來說明。在步驟210,對類型B與加載的高速緩存的比較結(jié)果進(jìn)行判斷。在所述實施例中,如果類型B與加載的高速緩存的比較產(chǎn)生一個真結(jié)果,即類型B與加載的高速緩存的比較確定它們匹配,則在步驟222將真值返回給請求判定對象是否是類型B的子類型的函數(shù)。換言之,如果加載的類與類型B是相同的類,或者如果加載的類是類型B的子類型,則返回真值。一旦返回真值后,判斷對象是否是類型B的子類型的流程即告完成。
另一方面,如果步驟210判定,類型B與加載的高速緩存的比較得不出真結(jié)果,則在步驟212計算對象的類與類型B之間的子類型關(guān)系。就是說,當(dāng)判定對象的類與類型B不相同時,就要通過計算來確定對象的類與類型B之間的子類型關(guān)系,如果存在的話。計算子類型關(guān)系之后,過程流繼續(xù)到步驟214,判定對子類型的計算是否產(chǎn)生真結(jié)果,即是否對象的類與類型B之間存在一個有效的子類型關(guān)系。
如果步驟214判定,對象的類與類型B之間不存在子類型關(guān)系,則在步驟220,向請求子類型檢查的函數(shù)返回一個假值。一旦返回假值后,判斷對象是否是類型B的子類型的流程即告完成。然而,如果步驟214判定,對象的類與類型B之間存在子類型關(guān)系,則過程流繼續(xù)到步驟216,在該步驟中,用類B“填充”對象的類的高速緩存。換言之,類B或者說對類型B的引用,被存儲到該對象的類的高速緩存單元。最后,在用類型B“填充”該對象的類的高速緩存之后,在步驟218向系統(tǒng)返回一個真值,以指示對象的類與類型B之間存在子類型關(guān)系。然后,判斷一個對象是否是類型B的子類型的流程即告完成。
下面結(jié)合圖2b,說明按照本發(fā)明的實施例,將類型B與加載的高速緩存一例如某特定對象的類進(jìn)行比較的相關(guān)步驟。就是說,要討論的是圖2a的步驟208的一個實施例。類型B與加載的高速緩存的比較始于步驟232,將高速緩存單元裝入一個寄存器。特別地,將該對象的類的高速緩存單元存入一個寄存器(下文將結(jié)合圖2c說明高速緩存單元)。高速緩存單元被存入寄存器后,在步驟234將寄存器的內(nèi)容與類型B作比較。如上所述,一種采用高速緩存技術(shù)的檢查機制允許將以前的子類型檢查結(jié)果高速緩存起來,目的是在隨后執(zhí)行相同檢查時通過使用該高速緩存的值來加快相同檢查的速度。由于檢查時采用高速緩存的單元,可以隨時訪問該單元。幾乎可采用任何適當(dāng)方法來比較高速緩存單元與寄存器的內(nèi)容。本領(lǐng)域的熟練人員一般都很了解這類方法。一旦寄存器內(nèi)容與類型B作比較后,比較類型B與加載的高速緩存的過程即告完成。
如上所述,類例如類對象包括一個可在其中存儲以前的子類型檢查結(jié)果的高速緩存單元。圖2c是表示按照本發(fā)明的一個實施例,具有高速緩存單元的類的圖示。對象“S”252包括首部256,并有一個指向類260的類指針。類260包括首部264和高速緩存單元268。前文說過,高速緩存單元268被用來存儲以前-例如第一個-與類260關(guān)聯(lián)的子類型檢查的結(jié)果。應(yīng)當(dāng)明白,當(dāng)類260被初始化時,高速緩存單元268一般可初始化為任意值。舉例來說,可將高速緩存單元268初始化來標(biāo)識類260。一般來說,高速緩存單元268可看作是個“動態(tài)”存儲單元,這是因為,隨著程序的執(zhí)行,或更確切地說,隨著子類型檢查的執(zhí)行,高速緩存單元268中存儲的結(jié)果可能會改變。就是說,高速緩存單元268的內(nèi)容可以被更新。
如果已知對象“S”252是類260的成員時,則在涉及對象“S”252的子類型檢查期間,可以訪問高速緩存單元268,以獲取涉及類260的最新子類型檢查結(jié)果。一般來說,可以更新高速緩存單元268,以存儲涉及類260的最新子類型檢查結(jié)果。這樣,如果高速緩存單元268存儲的結(jié)果不是與對象“S”252關(guān)聯(lián)的子類型時,則一旦在確定了與對象“S”252關(guān)聯(lián)的實際子類型時,就可以將其存儲到高速緩存單元268。應(yīng)當(dāng)明白,在有些實施例中,向高速緩存單元268存儲以及從中檢索信息可能涉及到同步,以解決可能出現(xiàn)的高速緩存相干性問題。
圖3表示一個典型的適于實現(xiàn)本發(fā)明的通用計算機系統(tǒng)。計算機系統(tǒng)330包括任意多個與存儲器連接的處理器332即中央處理單元(CPU)。存儲器一般包括諸如隨機存取存儲器(RAM)的主存儲器334和諸如只讀存儲器(ROM)的主存儲器336。
可以安排計算機系統(tǒng)330-或更確切地說-各CPU,去支持一個虛擬機。本領(lǐng)域的熟練人員明白這一點。后文將結(jié)合圖4描述計算機系統(tǒng)330上支持的一例虛擬機。本領(lǐng)域眾所周知,ROM334的作用是單向地向各CPU332傳輸數(shù)據(jù)和指令,而RAM336的作用則是雙向地向各CPU332傳輸數(shù)據(jù)和指令和從其接收數(shù)據(jù)和指令。兩種主存儲器334、336都可以包括幾乎任何適當(dāng)?shù)挠嬎銠C可讀介質(zhì)。二級存儲介質(zhì)338一般來說是海量存儲器,也能雙向地連接到各CPU332。一般來說,二級存儲介質(zhì)338可以配置來提供額外的存儲容量,可以是一種用于存儲計算機代碼、計算機程序代碼設(shè)備、數(shù)據(jù)等等的計算機可讀介質(zhì)。一般來說,二級存儲介質(zhì)338是諸如硬盤或磁帶的存儲介質(zhì),速度比主存儲器334、336慢。二級存儲介質(zhì)338的形式可以是眾所周知的設(shè)備,包括(但不限于)磁帶機和紙帶機。本領(lǐng)域的熟練人員明白,二級存儲介質(zhì)338中保存的信息在適當(dāng)情況下,可像RAM336的一部分那樣以標(biāo)準(zhǔn)方式被引用,例如作為虛擬內(nèi)存。一種諸如CD-ROM的專用主存儲器334也可以單向地向各CPU傳送數(shù)據(jù)。
各CPU也連接到一個或多個輸入-輸出設(shè)備340,輸入-輸入設(shè)備包括(但不限于)視頻監(jiān)視器、軌跡球、鼠標(biāo)器、鍵盤、麥克風(fēng)、觸摸敏感顯示屏、傳感器讀卡機、磁帶或紙帶閱讀機、圖形輸入板、輸入筆、語音或手寫識別器、以及其它已知的輸入設(shè)備諸如其它計算機。最后,CPU332也能采用312所示的網(wǎng)絡(luò)連接,可選地連接到計算機或電信網(wǎng)絡(luò),例如因特網(wǎng)或內(nèi)部網(wǎng)。采用了這種網(wǎng)絡(luò)連接312,就可認(rèn)為各CPU332能從網(wǎng)絡(luò)接收數(shù)據(jù)。CPU332在執(zhí)行上述各方法步驟的過程中也能向網(wǎng)絡(luò)輸出數(shù)據(jù)。這種數(shù)據(jù)通常表示為一個待由各CPU332執(zhí)行的指令序列,可以例如實現(xiàn)在載波中的計算機數(shù)據(jù)信號從網(wǎng)絡(luò)接收和向網(wǎng)絡(luò)輸出。計算機硬件和軟件領(lǐng)域的熟練人員都熟悉上述的設(shè)備和材料。
上文說過,可以在計算機系統(tǒng)330上執(zhí)行一個虛擬機。圖4是圖3的計算機系統(tǒng)330支持的、適于實現(xiàn)本發(fā)明的虛擬機的圖示。如果要執(zhí)行計算機程序,例如用JavaTM程序設(shè)計語言編寫的計算機程序,要將源代碼410提供給編譯時環(huán)境405內(nèi)的編譯器420。編譯器420將源代碼410翻譯成字節(jié)代碼430。一般來說,源代碼410在軟件開發(fā)者創(chuàng)建了源代碼410時就被翻譯成字節(jié)代碼430。
字節(jié)代碼430一般來說可以復(fù)制、下載或以其它方式通過例如圖3中網(wǎng)絡(luò)312的網(wǎng)絡(luò)傳播,或者在諸如圖3中主存儲器334的存儲器上存儲。在所述實施例中,字節(jié)代碼430是獨立于平臺的。就是說,字節(jié)代碼430可以在運行在適當(dāng)虛擬機440上的幾乎任何計算機系統(tǒng)上執(zhí)行。
字節(jié)代碼430被提供給包含虛擬機440的運行環(huán)境435。在一個實施例中,虛擬機可以是JavaTM虛擬機。運行時環(huán)境435一般可采用諸如圖3中CPU的一個或多個處理器來執(zhí)行。虛擬機440包括編譯器440、解釋器444和運行時系統(tǒng)446。字節(jié)代碼430可提供給編譯器442或解釋器444。
如果將字節(jié)代碼430提供給編譯器442,則字節(jié)代碼430中包含的過程就被編譯成機器指令。在一個實施例中,編譯器442是一個適時的編譯器,它能將對字節(jié)代碼430所含過程的編譯,推遲到該過程馬上要被執(zhí)行時才進(jìn)行。如果將字節(jié)代碼430提供給解釋器444,則字節(jié)代碼430以每次一個字節(jié)代碼的方式被讀入解釋器444。每當(dāng)一個字節(jié)代碼被讀入解釋器444,解釋器444就執(zhí)行該字節(jié)代碼所定義的操作。就是說,解釋器444“解釋”字節(jié)代碼430,這一點本領(lǐng)域的熟練人員都明白。一般來說,解釋器444幾乎是連續(xù)地處理字節(jié)代碼和執(zhí)行與字節(jié)代碼430相關(guān)聯(lián)的操作。
當(dāng)一個過程被另一個過程調(diào)用,或從運行時環(huán)境435調(diào)用時,如果該過程是個解釋過程,則運行時系統(tǒng)446可以從運行環(huán)境435以一個字節(jié)代碼430序列的形式獲取該過程,這種形式的過程可被解釋器444直接執(zhí)行。另一方面,如果被調(diào)用的過程是個尚未編譯的編譯過程,則運行時系統(tǒng)446也是從運行時環(huán)境435以一個字節(jié)代碼430序列的形式獲取該過程,然后在下一步去啟動編譯器442。編譯器442于是從字節(jié)代碼生成機器指令,所生成的機器語言指令可由圖3的CPU直接執(zhí)行。一般來說,當(dāng)虛擬機440中止時,機器語言指令即被拋棄。
盡管本文僅描述了本發(fā)明的一些實施例,應(yīng)當(dāng)明白,本發(fā)明可以以許多其它形式來實現(xiàn)而不偏離本發(fā)明的精神和范圍。例如,在有些實施例中,類對象可以包含一個以上的高速緩存單元。如果一個類對象包含一個以上的高速緩存單元,則可以存儲先前的一個以上的子類型檢查結(jié)果。就是說,對于某個對象,可以存儲一個以上的可能子類型,這樣,如果確定一個高速緩存單元中存儲的子類型不是該對象的子類型時,就檢查在另一個高速緩存單元中存儲的子類型。
盡管本發(fā)明是就在類的高速緩存單元中存儲子類型檢查結(jié)果而進(jìn)行說明的,應(yīng)當(dāng)明白,以前的結(jié)果并不是非要在高速緩存單元中存儲。相反,以前的結(jié)果可以被存儲在幾乎任何在子類型檢查期間能訪問到的動態(tài)存儲單元中。例如,可以將以前的子類型檢查結(jié)果存儲到一段與該類并無直接關(guān)聯(lián)的計算機代碼中。另一種方法是,可以將以前的子類型檢查結(jié)果存儲到一個動態(tài)的、可全局訪問的表中,每當(dāng)執(zhí)行一個涉及某特定類的子類型檢查時就對其進(jìn)行訪問。這樣一個表可以直接與該特定類相關(guān)。
應(yīng)當(dāng)明白,在一個實施例中,如果不采用為判定某特定對象是否是某個子類型的對象的檢查,可轉(zhuǎn)而采用為判定某特定對象是否不是某個子類型的對象的檢查。這種檢查的結(jié)果一般可存儲在一個類的高速緩存單元中、計算機代碼段中或作為全局表的一部分。換言之,可以用高速緩存單元來保存對于一個特定子類型檢查一個可能不會匹配的子類型名。
一般來說,使用子類型檢查的指令或操作,會因為特定系統(tǒng)的要求而差別很大。例如在JavaTM環(huán)境中,“astore”指令、“checkcast”指令和“instanceof”指令一般采用子類型檢查。
此外,根據(jù)本發(fā)明進(jìn)行子類型檢查的相關(guān)步驟也可以變化。在不偏離本發(fā)明的精神和范圍的情況下,這些步驟一般可以修改、變化次序、增加或者去除。例如,對比較和計算是否產(chǎn)生一個“真”標(biāo)志的判斷,可以改為對比較和計算是否產(chǎn)生一個“假”標(biāo)志的判斷。另外,如果類對象包括一個以上的高速緩存單元,則進(jìn)行子類型檢查的相關(guān)步驟就可以包括循環(huán)步驟,循環(huán)地測試每個高速緩存單元,直到找出子類型匹配或者測試完所有高速緩存單元時才結(jié)束循環(huán)。因此,本文中的例子應(yīng)視為是示例性的而不是限制性的,本發(fā)明并不局限于本文所述的細(xì)節(jié),而是由后附的權(quán)利要求及其等同的全部范圍所規(guī)定的。
權(quán)利要求
1.一種計算機實現(xiàn)的方法,用于確定與作為一個基于對象的計算系統(tǒng)一部分的對象相關(guān)聯(lián)的類是否是另一個類型的子類型,該方法包括獲取一個候選類型,該候選類型是從與該對象關(guān)聯(lián)的類相關(guān)的一個動態(tài)存儲位置獲取的;將該候選類型與第一個類型作比較;判斷該候選類型實際上是否等于第一個類型;如果判定該候選類型實際上等于該第一個類型,就提供一個表示該候選類型是該第一個類型的子類型的指示。
2.權(quán)利要求1所述的計算機實現(xiàn)的方法,其中,從與該對象關(guān)聯(lián)的類相關(guān)的動態(tài)存儲位置獲取的該候選類型,是從該對象關(guān)聯(lián)的類的高速緩存單元獲取的。
3.權(quán)利要求2所述的計算機實現(xiàn)的方法,其中,將該候選類型與第一個類型作比較包括將該候選類型從高速緩存單元裝入寄存器;將高速緩存單元的內(nèi)容與第一個類型比較。
4.上述任一個權(quán)利要求所述的計算機實現(xiàn)的方法,其中,如果判定該候選類型實際上不等于第一個類型,則該方法進(jìn)一步包括計算該對象的類與第一個類型之間的類型關(guān)系。
5.權(quán)利要求4所述的計算機實現(xiàn)的方法,進(jìn)一步包括判斷該對象的類與第一個類型之間是否存在一個類型關(guān)系,其中,如果判定該對象的類與第一個類型之間存在著類型關(guān)系,則將第一個類型的指示存儲到該對象的類的高速緩存單元中。
6.上述任一個權(quán)利要求所述的計算機實現(xiàn)的方法,進(jìn)一步包括將該對象的類裝入寄存器。
7.一個計算機系統(tǒng),配置用于確定與駐留在該計算機系統(tǒng)上的第一個對象關(guān)聯(lián)的子類型,該計算機系統(tǒng)包括一個處理器;一個將一個候選類型裝入與計算機系統(tǒng)關(guān)聯(lián)的內(nèi)存的加載機構(gòu),該候選類型是從與第一個對象關(guān)聯(lián)的類對象所關(guān)聯(lián)的存儲位置獲取的;一個配置成用于將該候選類型與第一個類型比較的比較機構(gòu);一個配置成用于確定該候選類型是否實際上等于第一個類型的判斷機構(gòu);一個配置成用于在確定該候選類型實際上等于該第一個類型時,提供一個表示該候選類型等于第一個類型的子類型的指示的指示器。
8.根據(jù)權(quán)利要求7的計算機系統(tǒng),其中,從該類對象獲取的該候選類型是從該類對象的高速緩存單元獲取的。
9.根據(jù)權(quán)利要求8的計算機系統(tǒng),其中,配置成用于將該候選類型與該第一個類型比較的比較機構(gòu)包括配置成用于將該候選類型從該高速緩存單元裝入寄存器的加載機構(gòu);配置成用于將該高速緩存單元的內(nèi)容與第一個類型比較的比較機構(gòu)。
10.根據(jù)權(quán)利要求7~9中任一項權(quán)利要求的計算機系統(tǒng),進(jìn)一步包括,配置成用于在確定該候選類型實際上不等于第一個類型時,計算該類對象與第一個類型之間的類型關(guān)系的計算機構(gòu)。
11.根據(jù)權(quán)利要求10的計算機系統(tǒng),進(jìn)一步包括配置成用于判斷該類對象與第一個類型之間是否存在類型關(guān)系的判斷機構(gòu);配置成用于在確定該類對象與第一個類型之間存在著類型關(guān)系時,將第一個類型的標(biāo)志存儲到該類對象的高速緩存單元的存儲機構(gòu)。
12.一種計算機程序產(chǎn)品,設(shè)計用于使計算機確定與作為基于對象的計算系統(tǒng)一部分的對象關(guān)聯(lián)的子類型,該計算機程序產(chǎn)品包括從與第一個對象關(guān)聯(lián)的類對象獲取一個候選類型的計算機代碼;將該候選類型與第一個類型作比較的計算機代碼;判斷該候選類型實際上是否等于第一個類型的計算機代碼;當(dāng)判定該候選類型實際上等于第一個類型時,提供一個表示該候選類型是第一個類型的子類型的指示的計算機代碼;以及存儲該計算機代碼的計算機可讀介質(zhì)。
13.權(quán)利要求12所述的計算機程序產(chǎn)品,其中的計算機可讀介質(zhì)是實現(xiàn)在載波中的數(shù)據(jù)信號。
14.一種計算機實現(xiàn)的方法,用于對屬于一個特定類的成員的對象執(zhí)行子類型檢查,該方法包含從與該特定類相關(guān)聯(lián)的一個位置獲取一個存儲單元,該存儲單元包括潛在地與該對象關(guān)聯(lián)的第一個子類型的有關(guān)信息;判斷該存儲單元所含信息是否與該對象相關(guān)聯(lián)的一個實際子類型有關(guān);在確定該存儲單元的信息與該實際類型有關(guān)時,提供一個表示該存儲單元所含信息與該實際子類型有關(guān)的指示。
15.權(quán)利要求14所述的計算機實現(xiàn)的方法,進(jìn)一步包括在確定該存儲單元所含信息與該實際子類型無關(guān)時,判斷與該對象相關(guān)的該實際子類型;并將與該實際子類型有關(guān)的信息存儲到與該特定類關(guān)聯(lián)的位置。
16.一種計算機實現(xiàn)的方法,用于確定與作為基于對象的計算系統(tǒng)一部分的對象關(guān)聯(lián)的類是否是另一個類型的子類型,其中該對象屬于第一個類型,該方法包括獲取第二個類型,該第二個類型是該對象的候選類型;將第一個類型與第二個類型作比較;判斷第二個類型實際上是否等于第一個類型;如果判定第二個類型實際上等于第一個類型,就將與第二個類型關(guān)聯(lián)的信息存儲到該對象關(guān)聯(lián)的類所關(guān)聯(lián)的動態(tài)存儲位置,其中,在該動態(tài)存儲位置存儲信息允許該信息被訪問,用于隨后的類型檢查。
17.權(quán)利要求16所述的計算機實現(xiàn)的方法,進(jìn)一步包括在確定第二個類型實際上等于第一個類型時,提供第二個類型是第一個類型的子類型的指示。
18.權(quán)利要求16或17所述的計算機實現(xiàn)的方法,其中,獲取第二個類型包括從包含多個類型的數(shù)據(jù)結(jié)構(gòu)中獲取第二個類型。
19.權(quán)利要求18所述的計算機實現(xiàn)的方法,進(jìn)一步包括創(chuàng)建包含多個類型的數(shù)據(jù)結(jié)構(gòu)。
20.權(quán)利要求16~19之一所述的計算機實現(xiàn)的方法,進(jìn)一步包括在確定第二個類型實際上不等于第一個類型時,獲取第三個類型,該第三個類型是該對象的候選類型,其中該第三個類型是從包含多個類型的數(shù)據(jù)結(jié)構(gòu)中獲取的;將第一個類型與第三個類型作比較;判斷第三個類型實際上是否等于第一個類型;如果判定第三個類型實際上等于第一個類型,就將與第三個類型關(guān)聯(lián)的信息存儲到該動態(tài)存儲位置。
21.一種計算機實現(xiàn)的方法,用于確定與作為基于對象的計算系統(tǒng)一部分的對象關(guān)聯(lián)的類是否是另一個類型的子類型,該方法包括將第一個候選類型存儲到與該對象關(guān)聯(lián)的類所關(guān)聯(lián)的一個動態(tài)存儲位置;從該動態(tài)存儲位置獲取第一個候選類型;將第一個候選類型與某對象類型作比較,該對象類型是與該對象關(guān)聯(lián)的對象類型;判斷第一個候選類型實際上是否與該對象類型相同;如果判定第一個候選類型實際上與該對象類型相同,就提供一個表示第一個候選類型是該對象類型的子類型的指示。
22.權(quán)利要求21所述的計算機實現(xiàn)的方法,其中,當(dāng)判定第一個候選類型實際上與該對象類型不相同時,該方法進(jìn)一步包括獲取一個第二個候選類型,其中該第二個候選類型不是從該動態(tài)存儲位置獲取的;將第二個候選類型與該對象類型作比較;判斷第二個候選類型實際上是否與該對象類型相同;如果判定第二個候選類型實際上與該對象類型相同,就提供一個表示第二個候選類型是對象類型的子類型的標(biāo)志;將第二個候選類型存儲到該動態(tài)存儲位置。
23.一個計算機系統(tǒng),配置成用于確定駐留在該計算機系統(tǒng)上的第一個類型的對象所關(guān)聯(lián)的子類型,該計算機系統(tǒng)包括一個處理器;一個配置成用于獲取第二個類型的第一機構(gòu),其中該第二個類型是該對象的一個候選類型;用于將第一個類型與第二個類型比較的比較器;用于確定第二個類型實際上是否等于第一個類型的判斷機構(gòu);用于在確定第二個類型實際上等于第一個類型時,將與第二個類型關(guān)聯(lián)的信息存儲到與該對象關(guān)聯(lián)的類所關(guān)聯(lián)的一個動態(tài)存儲位置的動態(tài)存儲機構(gòu),該動態(tài)存儲位置存儲的該信息用于在隨后的類型檢查中被訪問。
全文摘要
本文披露了在程序執(zhí)行期間進(jìn)行快速子類型檢查的方法和裝置。根據(jù)本發(fā)明的一個方面,判定與作為基于對象的計算系統(tǒng)一部分的對象關(guān)聯(lián)的類是否是另一個類型的子類型的方法,包括從與該對象關(guān)聯(lián)的類所關(guān)聯(lián)的動態(tài)存儲位置獲取一個候選類型,將該候選類型與潛在地與該候選類型相同的第一個類型作比較。然后判斷該候選類型實際上是否等于第一個類型。如果確定該候選類型實際上等于第一個類型,就提供一個表示該候選類型實際上等于第一個類型的子類型的指示。
文檔編號G06F9/44GK1236919SQ99104080
公開日1999年12月1日 申請日期1999年3月23日 優(yōu)先權(quán)日1998年3月23日
發(fā)明者L·巴克, S·米特洛維, U·霍爾茲勒 申請人:太陽微系統(tǒng)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1