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

基于標(biāo)記的鏈接的制作方法

文檔序號:6407186閱讀:155來源:國知局
專利名稱:基于標(biāo)記的鏈接的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及用于資源受限裝置如智能卡等的面向?qū)ο?、結(jié)構(gòu)中性的程序。
背景技術(shù)
虛擬機(jī)是一種通過處理器執(zhí)行的軟件應(yīng)用程序或指令序列產(chǎn)生的抽象計算機(jī)。術(shù)語“結(jié)構(gòu)中性”指的是例如用JavaTM編程語言寫的程序,它們可以在具有各種不同計算機(jī)結(jié)構(gòu)的各種計算機(jī)平臺上通過虛擬機(jī)來執(zhí)行。這樣,例如在基于WindowsTM的個人計算機(jī)系統(tǒng)上執(zhí)行的虛擬機(jī)將使用與如在基于UNIXTM的計算機(jī)系統(tǒng)上執(zhí)行的虛擬機(jī)相同的指令組。虛擬機(jī)的指令序列的獨立平臺編碼的結(jié)果是一個或多個字節(jié)代碼流,其中每一個例如是一個字節(jié)長的數(shù)字代碼。
已經(jīng)在包括例如與網(wǎng)絡(luò)瀏覽器有關(guān)的應(yīng)用程序的許多應(yīng)用程序中使用了Java編程語言。
Java編程語言是面向?qū)ο蟮?。在一個面向?qū)ο蟮南到y(tǒng)中,“類”描述了數(shù)據(jù)的集合和操作該數(shù)據(jù)的方法。與數(shù)據(jù)和方法一起的標(biāo)記描述了對象的狀態(tài)和性能。
Java編程語言也是可檢驗的,以便在執(zhí)行以Java編程語言編寫的應(yīng)用程序之前,可以確定是否程序中的指令序列試圖處理那些用于字節(jié)代碼的類型不正確的數(shù)據(jù)或者是否程序的字節(jié)代碼指令的執(zhí)行將引起操作數(shù)堆棧的下溢或上溢。
JavaTM虛擬機(jī)執(zhí)行Java編程語言寫的虛擬機(jī)代碼并且被設(shè)計用于32位的結(jié)構(gòu)。然而,許多資源受限裝置如智能卡具有8位或16位的結(jié)構(gòu)。
智能卡也稱為智能便攜式數(shù)據(jù)攜帶卡,一般由塑料或金屬制成并且具有電子芯片,該芯片中包括用于執(zhí)行程序的嵌入式微處理器以及用于存儲程序和數(shù)據(jù)的存儲器。這種大小可與信用卡相似的裝置通常具有有限的存儲容量。例如,一些智能卡具有小于1千字節(jié)(1K)的隨機(jī)存取存儲器(RAM)以及有限的只讀存儲器(ROM),和/或非易失性存儲器如電擦除可編程只讀存儲器(EEPROM)。
一般地,在智能卡處理器上運行的程序確定了該卡所提供的服務(wù)。隨著時間流逝,卡上的程序可能需要更新,例如為了增加新的功能或改進(jìn)現(xiàn)有的功能。為此,該卡應(yīng)該能夠接受可以替代其它程序的新程序。
執(zhí)行字節(jié)代碼的虛擬機(jī)(例如,完全的Java虛擬機(jī))通常要求相當(dāng)大的存儲量以加載字節(jié)代碼和解析標(biāo)識(reference)。特別地,在Java虛擬機(jī)中,符號標(biāo)識用于指出諸如類、方法和字段之類的程序元素。通過使用它的符號名來定位該元素可以解析這些程序元素的標(biāo)識。這種操作要求相當(dāng)大的隨機(jī)存取存儲器(RAM)。在只有較小RAM的環(huán)境中,這可能是不方便的。因為智能卡對于成本是敏感的,它們依靠便宜的、低性能處理器和低容量存儲器裝置。因為成本和功率的原因使得在這種資源受限的計算機(jī)中配置低功率和低容量處理器以及存儲器組件,在這種資源受限裝置上操作Java虛擬機(jī)的能力是困難的但仍然是需要的。

發(fā)明內(nèi)容
根據(jù)本發(fā)明的一方面,提供了一種用于實現(xiàn)適用于在一資源受限的裝置上執(zhí)行的小的虛擬機(jī)的方法,該方法包括在一資源豐富裝置上執(zhí)行一處理功能;記錄所述執(zhí)行的結(jié)果;及使用一或多個標(biāo)記將所述結(jié)果傳送給一資源受限裝置,所述資源受限裝置被構(gòu)成以使用一或多個標(biāo)記來替代執(zhí)行所述處理功能。
根據(jù)本發(fā)明的另一方面,提供了一種用于實現(xiàn)適用于在一資源受限的裝置上執(zhí)行的小的虛擬機(jī)的設(shè)備,該設(shè)備包括執(zhí)行裝置,用于在一資源豐富裝置上執(zhí)行一處理功能;記錄裝置,用于記錄所述執(zhí)行的結(jié)果;及傳送裝置,用于使用一或多個標(biāo)記將所述結(jié)果傳送給一資源受限裝置,所述資源受限裝置被構(gòu)成以使用一或多個標(biāo)記來替代執(zhí)行所述處理功能。
根據(jù)本發(fā)明的再一方面,提供了一種用于實現(xiàn)適用于在一資源受限的裝置上執(zhí)行的小的虛擬機(jī)的方法,該方法包括接收一或多個標(biāo)記,該一或多個標(biāo)記包括在一資源豐富裝置上執(zhí)行一處理功能的結(jié)果;及在所述資源受限裝置上使用所述一或多個標(biāo)記來替代執(zhí)行所述處理功能。
根據(jù)本發(fā)明的再另一方面,提供了一種用于實現(xiàn)適用于在一資源受限的裝置上執(zhí)行的小的虛擬機(jī)的設(shè)備,該設(shè)備包括接收裝置,用于接收一或多個標(biāo)記,該一或多個標(biāo)記包括在一資源豐富裝置上執(zhí)行一處理功能的結(jié)果;及使用裝置,用于在所述資源受限裝置上使用所述一或多個標(biāo)記來替代執(zhí)行所述處理功能。
根據(jù)本發(fā)明的再另一方面,提供了一種資源受限裝置,包括存儲裝置,用于存儲一或多個標(biāo)記,該一或多個標(biāo)記包括在一資源豐富裝置上執(zhí)行一處理功能的結(jié)果;及處理器,被連接至所述存儲器并被構(gòu)成以接收所述一或多個標(biāo)記;且在所述資源受限裝置上使用所述一或多個標(biāo)記來替代執(zhí)行所述處理功能。
本發(fā)明的優(yōu)點可以包括下面的一個或多個。本發(fā)明通過唯一的標(biāo)記標(biāo)識符使用較小的存儲空間以有效地使用資源受限裝置上的資源。另外,本發(fā)明能夠鏈接和判定資源受限裝置上輸出項的標(biāo)識。經(jīng)過元數(shù)據(jù)文件如輸出文件,本發(fā)明允許將輸出元素公開。然而,能夠進(jìn)行的這種公開不能暴露專用的或?qū)S械脑睾托?yīng)用程序(applet)以及相關(guān)庫的細(xì)節(jié)。因此,許多分開的改進(jìn)的應(yīng)用程序可以加載到資源受限裝置并且相互共享它們的組件而不用考慮專用的保密信息。
另外,結(jié)構(gòu)中性的語言如Java的優(yōu)點是能夠在資源受限裝置上實現(xiàn),同時保留它的語義。標(biāo)記也可以用于內(nèi)部的或?qū)S玫脑?。這樣,標(biāo)記可以分配給專用的和包可視實例(instance)字段以及包可視虛擬方法。本發(fā)明在分配標(biāo)記上施加較少的限制,并且對于特定的應(yīng)用程序可以進(jìn)一步定義或優(yōu)化該標(biāo)記種類。這樣,本發(fā)明支持一次寫入并且可以在任何地方,甚至在資源限制裝置如具有有限存儲容量的智能卡上運行的便攜的、結(jié)構(gòu)中性代碼。


圖1示出了將獨立于硬件平臺的代碼轉(zhuǎn)換和加載到智能卡。
圖2示出與圖1所示的智能卡進(jìn)行通訊的計算機(jī)系統(tǒng)。
圖3是說明內(nèi)部包相關(guān)性的示意圖。
圖4A和4B是說明兩個轉(zhuǎn)換器操作的示意圖。
圖5是說明解析靜態(tài)標(biāo)識的兩個包和包登記的示意圖。
圖6是結(jié)合圖5的包說明鏈接處理的流程圖。
圖7A-7I是說明不同的類、字段和方法標(biāo)識的示意圖。
圖8A-8I是說明用于分配標(biāo)記和支持表格的處理的流程圖。
圖9A-9C是說明用于判定實例字段和方法的標(biāo)記的處理流程圖。
具體實施例方式
本發(fā)明描述了一種采用壓縮、保密格式表示用于面向?qū)ο蟪绦虻逆溄有畔⒌姆椒?。利用這種方法,能夠在資源受限裝置上下載、鏈接和執(zhí)行所述程序。資源受限裝置一般認(rèn)為是在存儲器和/或計算功率或速度上受限制的裝置。雖然下面參照智能卡描述了特定的實現(xiàn),本發(fā)明也可以用于其它的資源受限裝置,包括但不限于蜂窩式電話、邊界掃描裝置、字段可編程裝置、個人數(shù)據(jù)輔助(PDA)和尋呼機(jī)、以及其它小型或微型裝置。在某些情況下,資源受限裝置可以具有小到1K的RAM或小到16K的ROM。類似地,某些資源受限裝置基于為小于32位設(shè)計的結(jié)構(gòu)。例如,能夠使用本發(fā)明的某些資源受限裝置基于8位或16位結(jié)構(gòu),而不是32位結(jié)構(gòu)。
參照圖1,對于資源受限裝置如智能卡40的小應(yīng)用程序的開發(fā)以類似于Java程序開發(fā)的方式開始。換句話說,開發(fā)器編寫一個或多個Java類并且采用Java編譯器來編譯源碼以產(chǎn)生一個或多個類文件10。例如在工作站上能夠使用模擬工具運行、測試和調(diào)試小應(yīng)用程序以模仿卡40的環(huán)境。當(dāng)準(zhǔn)備將小應(yīng)用程序下載到卡40上時,類文件10被轉(zhuǎn)換器14轉(zhuǎn)換成一個經(jīng)轉(zhuǎn)換的小應(yīng)用程序(CAP)文件16。轉(zhuǎn)換器14可以是由臺式計算機(jī)執(zhí)行的Java應(yīng)用程序。除了被轉(zhuǎn)換的類文件10以外,轉(zhuǎn)換器14可以接受一個或多個輸出文件12作為其輸入。輸出文件12包含用于通過轉(zhuǎn)換的類輸入的其它包內(nèi)容的命名或鏈接信息。
一般地,CAP文件16包括在單個Java包中定義的所有類和接口并且由一個8位字節(jié)流表示。所有的16位和32位參數(shù)都是分別通過讀取兩個或四個連續(xù)的8位字節(jié)來構(gòu)造的。除此以外,CAP文件16包括常數(shù)池組件(或“常數(shù)池”)18,該組件與方法組件20分開打包。常數(shù)池18可以包括不同類型的常數(shù),這些常數(shù)包括程序被鏈接或下載到智能卡40時或在智能卡執(zhí)行時判定的方法和字段標(biāo)識。方法組件20指定了下載到智能卡40并且隨后由智能卡執(zhí)行的應(yīng)用程序指令。
在轉(zhuǎn)換之后,CAP文件16可以存儲在計算機(jī)可讀介質(zhì)17上,如硬盤、軟盤、光存儲介質(zhì)、閃速(flash)設(shè)備或某些其它適當(dāng)?shù)慕橘|(zhì)上?;蛘哂嬎銠C(jī)可讀介質(zhì)可以采用載波形式,例如網(wǎng)絡(luò)數(shù)據(jù)傳輸或射頻(RF)數(shù)據(jù)鏈接。
然后CAP文件16可以通過外圍設(shè)備的卡接收裝置(CAD)24復(fù)制或傳送到終端22如臺式計算機(jī)。CAD24允許在智能卡40上寫入和檢索信息。CAD24包括一個可以插入智能卡40的卡插口(未示出)。一旦插入,連接器的觸點緊壓在智能卡40的表面連接區(qū)域上以提供功率并且允許與智能卡通訊,不過在其它實施方式中,也可以使用無接觸的通訊。終端22還包括安裝工具26,它將用于傳輸?shù)腃AP文件16加載到卡40上。智能卡40具有可以包括一組觸點的輸入/輸出(I/O)端口42,經(jīng)過這些觸點提供程序、數(shù)據(jù)和其它通訊。卡40還包括安裝工具46,用于接收CAP文件16的內(nèi)容和準(zhǔn)備在卡40上執(zhí)行的小應(yīng)用程序。安裝工具46可以例如通過Java程序?qū)崿F(xiàn)并且可以在卡40上執(zhí)行。卡40還具有存儲器,包括易失性存儲器如RAM50???0還具有ROM52和非易失性存儲器如EEPROM54。通過控制器44準(zhǔn)備的小應(yīng)用程序可被存儲在EEPROM54中。
在一個特定實施方式中,小應(yīng)用程序通過在微處理器48上運行的虛擬機(jī)49來執(zhí)行。可被稱為Java卡虛擬機(jī)的虛擬機(jī)49不需要加載或操作CAP文件16。而是Java卡虛擬機(jī)49執(zhí)行先前作為CAP文件16部分存儲的小應(yīng)用程序代碼。Java卡虛擬機(jī)49和安裝工具46之間的功能劃分允許虛擬機(jī)和安裝工具都保持相對較小。
一般地,為資源受限平臺如智能卡40而編寫的實施方式和小應(yīng)用程序遵循Java平臺包的標(biāo)準(zhǔn)規(guī)則。在T.Lindholm等人的“Java虛擬機(jī)規(guī)范(1997)”和K.Arnold等人的“Java編程語言第二版(1998)”中描述了Java虛擬機(jī)和Java編程語言,在此將它們整個作為參考。用于智能卡平臺的應(yīng)用程序編程接口(API)類可以作為包括包標(biāo)示的Java源文件來寫,這里一個包包括了許多編譯單元并且具有唯一的名稱。包機(jī)構(gòu)用于識別和控制對于類、字段和方法的存取。Java卡API允許對于一個Java卡使能平臺所寫的應(yīng)用程序可以運行在任何其它Java卡使能平臺上。另外,Java卡API兼容于正式的國際標(biāo)準(zhǔn)如ISO7816以及業(yè)界特定的標(biāo)準(zhǔn)如Europay/MasterCard/Visa(EMV)。
雖然已將運行在微處理器48上的虛擬機(jī)49作為一個在智能卡40上執(zhí)行字節(jié)代碼的實施例進(jìn)行了描述,但在其它實施例中,也可以使用專用集成電路(ASIC)或硬件和固件的組合來代替。
參照圖1,控制器44使用安裝工具46來接收CAP文件16的內(nèi)容和準(zhǔn)備處理器48執(zhí)行的小應(yīng)用程序。安裝工具46可以作為例如已經(jīng)適當(dāng)?shù)乇晦D(zhuǎn)換在智能卡40上執(zhí)行的Java程序來實現(xiàn)。在下面的描述中,假設(shè)控制器44包括在微處理器48上運行的虛擬機(jī)程序49。虛擬機(jī)49不需要加載或操作CAP文件16。而是虛擬機(jī)49執(zhí)行CAP文件16中的小應(yīng)用程序代碼。虛擬機(jī)49和安裝工具46之間的功能劃分允許虛擬機(jī)和安裝工具都保持相對較小。在其它實施例中,控制器44可以是硬連線的,例如作為專用集成電路(ASIC)或者它可以作為硬件和固件的組合來實現(xiàn)。
可以用于其它資源受限裝置的智能卡平臺也支持動態(tài)創(chuàng)建的對象,包括類實例和數(shù)組。一個類作為單個已有類的擴(kuò)展或子類被實現(xiàn)并且它的成員是方法以及稱為字段的變量。一種方法聲明(declare)將可以被調(diào)用和傳遞固定數(shù)量的值的可執(zhí)行代碼作為變元。類也可以實現(xiàn)Java接口。接口是標(biāo)識類型,它的成員是常數(shù)和抽象方法。虛擬機(jī)49可以包括解釋器或提供對運行期(runtime)系統(tǒng)存取的本地實現(xiàn),該系統(tǒng)包括Java卡API和支持功能。
如圖2所示,計算機(jī)22備有用于接收圖1的卡40的卡接受裝置24。計算機(jī)22可以連接到與多個其它計算裝置,如服務(wù)器47通訊的網(wǎng)絡(luò)45。它可以使用卡配備裝置經(jīng)過網(wǎng)絡(luò)45將數(shù)據(jù)和軟件加載到智能卡上。這種特性的下載可以包括加載到智能卡的小應(yīng)用程序或其它程序以及根據(jù)電子商務(wù)和其它應(yīng)用所使用的數(shù)字兌付和其它信息。用于控制卡接受裝置和智能卡的處理元素的指令和數(shù)據(jù)可以存儲在易失性或非易失性存儲器或者可以經(jīng)過通訊鏈路例如作為包含指令和/或數(shù)據(jù)的載波直接接收。另外,例如網(wǎng)絡(luò)45可以是LAN或WAN如互聯(lián)網(wǎng)或其它網(wǎng)絡(luò)。
圖3是說明加載到智能卡40的一組程序包(包括應(yīng)用程序接口(API)和小應(yīng)用程序)之間典型的分層相關(guān)性的示意圖。應(yīng)用程序可以遞增地加載到智能卡40和鏈接到卡上執(zhí)行,使得除了出廠時所編的功能以外可以采用另外的性能來更新智能卡40的功能。在示意圖中,Java語言框架50和Java卡框架52存在于Java卡API級別上。在Java卡API級別以上是具有一個或多個定制框架54的定制API級別。定制框架54可以通過一個或多個加值提供者經(jīng)過不同的軟件開發(fā)包(SDK)來提供以擴(kuò)展現(xiàn)有的框架或其它的API。最高級是應(yīng)用級,這里駐留不同的小應(yīng)用程序56、58和60。
如圖3所示,一個包可能取決于相同API級別的其它包或較低API級別的那些包。例如,小應(yīng)用程序58可以表示小應(yīng)用程序58中的程序元素并且Java卡框架52可以具有與Java語言框架50的相關(guān)性。另外,在定制API級別的定制框架54和小應(yīng)用程序58和60可以具有取決于Java卡框架52的標(biāo)識。接下來,小應(yīng)用程序56和58可以具有取決于定制框架54的標(biāo)識。小應(yīng)用程序56和定制框架54也可以取決于Java語言框架50。雖然圖3的例子示出了線性相關(guān)性,也可以使用適當(dāng)?shù)霓D(zhuǎn)換器14和安裝工具46來支持非線性相關(guān)性,如圓形的相關(guān)性。
從例如Java應(yīng)用程序到CAP文件74的一個類文件集合的轉(zhuǎn)換一般可能發(fā)生在臺式計算機(jī)上以備在智能卡40上安裝。臺式計算機(jī)22一般不像典型的智能卡40一樣是資源受限的。另外,轉(zhuǎn)換操作也可以在其它適當(dāng)?shù)钠脚_上進(jìn)行。
圖4A示出了用于轉(zhuǎn)換一個包的系統(tǒng),它可以定義一個準(zhǔn)備下載到智能卡40的小應(yīng)用程序或庫。轉(zhuǎn)換器72接收從一個或多個類文件70輸入的數(shù)據(jù),該文件定義小應(yīng)用程序的功能。轉(zhuǎn)換器72接著產(chǎn)生適用于下載的Java卡CAP文件74。
如下面更詳細(xì)描述的,CAP文件74包含輸出組件82用于判定其包中元素的標(biāo)識,這里這些元素可以通過其它包來標(biāo)識。輸出組件82包含用于靜態(tài)項如類、方法和字段的入口。對于動態(tài)項如實例字段、虛擬方法和接口方法的標(biāo)識不要求出現(xiàn)在輸出組件中,但可以根據(jù)下面描述的處理進(jìn)行控制。
在資源受限裝置中,為了表示項而使用的單代碼(Unicode)串占用了存儲器和處理器資源。代替這些單代碼串,輸出組件82將標(biāo)記、或簡單的唯一數(shù)值映射到CAP文件74中其它組件定義的特定元素上。用于表示輸出組件中這些元素的標(biāo)記值匹配于在相應(yīng)輸出文件80中公開的那些值。
更詳細(xì)地說,CAP文件74還具有標(biāo)題組件76、常數(shù)池78、方法組件80以及輸出組件82。常數(shù)池78通常包括一個或多個類、字段和方法標(biāo)識,從而可以通過包的常數(shù)池78間接地進(jìn)行對程序元素或項的一般標(biāo)識。方法組件80包含由CAP文件74所表示的小應(yīng)用程序包實現(xiàn)的所有方法。方法標(biāo)識判定位于方法組件中的方法。類和靜態(tài)字段標(biāo)識分別判定在類組件和靜態(tài)字段組件中的位置。
輸出組件82包括一個或多個具有標(biāo)記值84和相應(yīng)的程序元素鏈接信息86的入口,該信息描述了在CAP文件A74定義的包中可以找到特定的程序元素。鏈接信息專用于CAP文件74的內(nèi)容,而不是特定卡上的內(nèi)部表示。因此,這個組件不描述專用卡的個人或保密信息。
轉(zhuǎn)換器72還可以在類文件轉(zhuǎn)換到CAP文件74期間產(chǎn)生輸出文件80。每個CAP文件產(chǎn)生一個輸出文件。輸出文件80典型地具有一個或多個具有用于CAP文件74中特定程序元素的符號名90及其相應(yīng)標(biāo)記值92的入口。輸出文件80提供關(guān)于類文件包的每個外部可存取程序元素的信息和可以通過第二個包參照(輸入)到第二CAP文件(下面進(jìn)一步描述)的CAP文件74中的程序信息。例如,輸出文件80包含一個Java包中定義的所有公共類和接口的標(biāo)識、以及在這些類和接口中定義的所有公開和受保護(hù)的字段和方法的標(biāo)識。輸出文件80還包含這些程序元素或項到標(biāo)記的映射,這些標(biāo)記可以隨后用于在包轉(zhuǎn)換期間將輸入項的名稱映射到標(biāo)記。輸出文件不暴露小應(yīng)用程序和相關(guān)庫的專用或?qū)S屑?xì)節(jié)。因此,不同的單獨開發(fā)的應(yīng)用程序可以加載到資源受限裝置并且相互共享它們的組件而不用考慮專用的保密信息。輸出文件80不暴露小應(yīng)用程序和相關(guān)庫的專用和專有元素和細(xì)節(jié),單獨開發(fā)的應(yīng)用程序可以加載到卡40并且相互共享它們的輸出元素而不用考慮專用的保密信息。
參照圖3和圖4A,如果一系列包含javacard.framework API52的類文件70被轉(zhuǎn)換,則在轉(zhuǎn)換期間產(chǎn)生的輸出文件80允許其它被單獨轉(zhuǎn)換的小應(yīng)用程序知道使用哪個標(biāo)記來外部參照javacard.framework API52的項。例如,如果小應(yīng)用程序參照框架類PIN,用于javacard.framework的輸出文件80包含用于類javacard.framework.PIN與它相應(yīng)標(biāo)記的入口。轉(zhuǎn)換器72將這個標(biāo)記放在新的小應(yīng)用程序的CAP文件的常數(shù)池中,以表示對一個框架中該類的未判定標(biāo)識。如下面進(jìn)一步解釋的,在小應(yīng)用程序執(zhí)行期間,該標(biāo)記可以用于定位框架API包的輸出組件78的標(biāo)識項以檢索元素鏈接信息。例如,一種方法的鏈接信息可以提供用于定位該包的方法組件80中包含的適當(dāng)方法的信息。
圖4B示出轉(zhuǎn)換類文件94第二個包的轉(zhuǎn)換器72,這里這些類文件94輸入來自第一個包70的類文件的元素(圖4A)。例如,第二個包可以是一組小應(yīng)用程序類,它例如取決于在先前轉(zhuǎn)換的javacard.framework庫包中包含的某些類(如上面參照圖4A描述的)。轉(zhuǎn)換器72接收從類文件94和從先前轉(zhuǎn)換包的一個或多個輸出文件80輸入的數(shù)據(jù)。轉(zhuǎn)換器72產(chǎn)生適用于下載到例如智能卡40的CAP文件100。
用于第二個包的CAP文件B100包括具有小應(yīng)用程序類參照的所有包清單的輸入組件104。每個這種外部包標(biāo)識包括用于該包的內(nèi)部包標(biāo)記和外部唯一應(yīng)用程序標(biāo)識符(AID)之間的映射106。每個包標(biāo)記在CAP文件100的其它組件中用于以簡明的方式識別一個特定標(biāo)識的外部包,因此減少了表示小應(yīng)用程序的腳印(footprint)尺寸。
CAP文件100中還具有標(biāo)題組件102、輸入組件104和常數(shù)池108。常數(shù)池108包括一個或多個類標(biāo)識110,它采用相應(yīng)的包標(biāo)記和類標(biāo)記映射每個類標(biāo)識,因此將特定的類映射到它相應(yīng)的外部包和該包內(nèi)的類上。下面進(jìn)一步描述這些標(biāo)記的使用。常數(shù)池108也可以包括一個或多個方法標(biāo)識112,它類似于采用相應(yīng)的包標(biāo)記、類標(biāo)記和方法標(biāo)記來映射每個方法標(biāo)識。常數(shù)池108還包括一個或多個字段標(biāo)識114,每個分別具有其包標(biāo)記、類標(biāo)記和字段標(biāo)記。
一般地,可以通過每個包的常數(shù)池108間接進(jìn)行對程序元素或項的標(biāo)識。對其它包中的項的標(biāo)識被稱為外部的,并且根據(jù)標(biāo)記來表示。對相同CAP文件中的項的標(biāo)識被稱為內(nèi)部的,并且可以根據(jù)標(biāo)記或以不同的內(nèi)部格式(如對于CAP文件內(nèi)位置的指針)來表示。例如,對于類的外部標(biāo)識110包括包標(biāo)記和類標(biāo)記。同時,這些標(biāo)記規(guī)定某一外部包中的某一類。對于一個類的內(nèi)部標(biāo)識可以是對于CAP文件內(nèi)類結(jié)構(gòu)位置的指針。另一方面,外部標(biāo)記系統(tǒng)也可以內(nèi)部使用。外部標(biāo)識112-114表示靜態(tài)的類成員,字段或方法,具有包標(biāo)記、類標(biāo)記、以及用于靜態(tài)字段或靜態(tài)方法的標(biāo)記。對于靜態(tài)類成員的內(nèi)部標(biāo)識可以是對于CAP文件中項的位置的指針,但也可以使用標(biāo)記系統(tǒng)。對于實例字段、虛擬方法和接口方法的標(biāo)識包括類標(biāo)識和適當(dāng)類型的標(biāo)記。類標(biāo)識表明該標(biāo)識是外部的還是內(nèi)部的。
CAP文件的外部標(biāo)識可以在卡上從標(biāo)記形式解析為由Java卡虛擬機(jī)使用的內(nèi)部表示。標(biāo)記可以僅僅通過定義的包的上下文來判定。正如輸出文件從包的外部可視名稱映射到標(biāo)記,對卡上的每個包來說,都有一組用于從標(biāo)記映射到解析標(biāo)識的鏈接信息。以這種方式,轉(zhuǎn)換器97處理類文件92和輸出文件94,創(chuàng)建適用于將小應(yīng)用程序下載到資源受限裝置的圖像并解析對第一個包的標(biāo)識(鏈接)。
在圖4A和圖4B完成預(yù)處理之后,圖4B的CAP文件可以下載到智能卡40或包含圖4A的CAP文件的資源受限裝置上。圖5和圖6進(jìn)一步說明了基于標(biāo)記的鏈接如何用于智能卡40或小裝置上的靜態(tài)元素。靜態(tài)元素包括的元素的精確表示在轉(zhuǎn)換處理期間可以由轉(zhuǎn)換器識別。
在圖5中,包P2的圖像200已經(jīng)從例如CAP文件B100加載到卡40上并且在執(zhí)行之前或執(zhí)行期間連接到先前的包P1。包P2 200的程序元素可以包括對外部包P1中的方法和其它數(shù)據(jù)的標(biāo)識,該外部包P1已經(jīng)作為(CAP文件A74的)卡40上的圖像174存在。除此以外,圖像174還包括標(biāo)題組件176、常數(shù)池178、方法組件180以及包含了對所有輸出靜態(tài)項185的標(biāo)記清單的輸出組件182。為了幫助解決對于外部包的標(biāo)識,在卡40上創(chuàng)建包登記120以提供用于定位一個或多個外部包的信息,包括包P1的圖像174,它包含包P2的圖像200所需的特定方法。
除此以外,包P2的圖像200包括標(biāo)題組件202、輸入組件204、常數(shù)池208以及方法組件216,所有都對應(yīng)于CAP文件B100中的相應(yīng)組件102、104、108和116。上面相對于CAP文件描述了這些組件的一般構(gòu)成。通常,方法組件216將包括程序標(biāo)識如“new”(218)、“invokestatic”(220)和“getstatic_b”(222)以及它們各自調(diào)用的類標(biāo)識、方法標(biāo)識和字段標(biāo)識。
圖6示出對圖5中的包P2 200的鏈接處理140。當(dāng)方法組件216中的執(zhí)行方法調(diào)用一種特定方法例如位于外部包(包1)的方法組件180中的方法T時,要求鏈接(步驟142)。利用作為操作數(shù)提供給指令的索引,處理140定位和檢索常數(shù)池208中匹配的方法標(biāo)識212(步驟144)。如下面描述的,方法標(biāo)識包括用于定位外部包中該特定方法的包標(biāo)記、類標(biāo)記以及方法標(biāo)記。接著,處理140檢驗輸入組件204以根據(jù)檢索的包標(biāo)記找出外部包P1唯一的AID(步驟146)。然后對包登記120進(jìn)行檢驗以根據(jù)AID找出包P1的位置(步驟148)。一旦從包登記120中找到包P1的圖像174,就搜索圖像174的輸出組件182以定位具有特定的類標(biāo)記的類(步驟150)。然后通過搜索與步驟150找出的特定類有關(guān)的方法清單來找出所需方法例如方法T的程序鏈接信息,以定位具有特定的方法標(biāo)記的方法(這里方法標(biāo)記Y對應(yīng)于包P1 174的方法T)(步驟152)。最后,根據(jù)提供給輸出組件182中的方法的鏈接信息,確定方法組件180中特定的方法例如方法T的位置(步驟154)。
使用圖6的處理,可以將包下載到卡上并且準(zhǔn)備由虛擬機(jī)執(zhí)行。這個處理過程被稱為“安裝”??梢允褂锰幚砗玩溄硬僮鞔涡虿煌牟煌惭b處理(當(dāng)在卡上接收數(shù)據(jù)時和當(dāng)存儲它時)。這些安裝處理可以根據(jù)卡上可利用的資源來優(yōu)化。在一個實施例中,沒有鏈接產(chǎn)生,這樣,當(dāng)數(shù)據(jù)被接收時,它被立刻存儲。在代碼的解釋或執(zhí)行期間,發(fā)生外部標(biāo)識的解析。這樣,這個實施方式被用于較大的(較少限定)小裝置,因為所有的臨時鏈接信息被永久地存儲在這個卡上。
如上面討論的,代替在Java類文件中使用的單代碼串,使用標(biāo)記來識別CAP文件的項和解析資源有限裝置上的標(biāo)識。API的標(biāo)記由API的開發(fā)器分配并且在用于該API的包輸出文件中公開。因為公開了名稱到標(biāo)記的映射,API開發(fā)器可以選擇本發(fā)明限制內(nèi)的任何標(biāo)記序列。
同時,圖5和圖6描述了對于靜態(tài)項即類、靜態(tài)字段和靜態(tài)方法的標(biāo)識的解析。這些項的實施方式在編譯和轉(zhuǎn)換期間是完全可定位的。相反,在編譯和轉(zhuǎn)換期間,對于實例字段、虛擬方法和接口方法的標(biāo)識并不靜態(tài)地限制于特定的實施方式。這些項要求僅僅在運行時參照實例可用的附加信息。參照圖9A-9C描述了這些類型的標(biāo)識解析。
虛擬方法的標(biāo)記分配保留了面向?qū)ο蟮念悓哟蝺?nèi)的關(guān)系。虛擬方法和接口方法的標(biāo)記分別用作到虛擬方法表和接口方法表的索引。特定卡的平臺可以將標(biāo)記解析成對資源受限裝置VM的實現(xiàn)最為有用的內(nèi)部表示。
一些標(biāo)記可被解析為索引。例如,實例字段標(biāo)記可被解析為對類實例的索引。在這種情況下,標(biāo)記值可以與解析的索引值不同并且無關(guān)。
包中每一類型的項都具有其對該類型的標(biāo)記的不相關(guān)范圍。下面列出對于每一類型標(biāo)識的樣本標(biāo)記區(qū)域和分配規(guī)則。也可以制定其它的標(biāo)記區(qū)域和分配規(guī)則。

圖7A-7I是說明標(biāo)識表示的示意圖。圖7A-7C描述了輸入元素的標(biāo)識,而圖7D-7I描述了內(nèi)部項的標(biāo)識,其中一些也使用標(biāo)記。
圖7A示出了一個對外部類180的類標(biāo)識。圖7A的類標(biāo)識包括包標(biāo)記和類標(biāo)記。圖7B示出外部字段標(biāo)識的表示。外部字段標(biāo)識182包括包標(biāo)記、類標(biāo)記和字段標(biāo)記。圖7C示出外部方法標(biāo)識184的表示。外部標(biāo)識184包括包標(biāo)記、類標(biāo)記和方法標(biāo)記。應(yīng)該注意對于虛擬方法將方法標(biāo)記的高位設(shè)置為“0”。高位的設(shè)置表示該方法在定義的包之外是可存取的。高位可以是最高有效位,如一個字節(jié)的第7位、一個字的第15位或一個三字節(jié)單位的第23位。
設(shè)置包標(biāo)記的高位來表示一個輸入包。這用于區(qū)別外部和內(nèi)部標(biāo)識。如圖7D-7I所示,對內(nèi)部元素的標(biāo)識使其高位被設(shè)置為“0”。圖7D-7I的格式是在選定的情況下將標(biāo)記擴(kuò)展使用到內(nèi)部項的例子。
圖7D示出內(nèi)部類標(biāo)識186的表示。內(nèi)部類標(biāo)識186包括對于類組件中類信息結(jié)構(gòu)的偏置。圖7E示出用于內(nèi)部字段的靜態(tài)字段標(biāo)識188的表示。這樣,靜態(tài)字段標(biāo)識188包括一個被設(shè)置為“0”的字段和用于包括相對于靜態(tài)字段圖像中靜態(tài)字段的偏置的字段。圖7F是用于內(nèi)部方法的靜態(tài)方法標(biāo)識190的表示。靜態(tài)方法標(biāo)識190包括被設(shè)置為“0”的填充字段,以使該標(biāo)識具有與輸入方法標(biāo)識的大小相同的大小。靜態(tài)方法標(biāo)識190還包括提供與偏置相關(guān)的信息到方法組件的靜態(tài)方法的字段。
圖7G示出用于內(nèi)部字段的實例字段標(biāo)識192的表示。在圖7G中,實例字段標(biāo)識192包括對類組件中類信息結(jié)構(gòu)的偏置以及字段標(biāo)記。圖7H示出用于內(nèi)部方法的對公用或受保護(hù)方法的虛擬方法標(biāo)識194。虛擬方法標(biāo)識194包括對類組件中類信息結(jié)構(gòu)的偏置、一個被清零以表示外部可存取的虛擬方法和符合圖7C格式的字段。虛擬方法標(biāo)識194還包括方法標(biāo)記。
最后,圖7I示出對用于內(nèi)部方法的包可視方法的虛擬方法標(biāo)識196的表示。虛擬方法標(biāo)識196包括一個對于類信息結(jié)構(gòu)和類組件的偏置,一個被設(shè)置為“1”以表示標(biāo)識的范圍位于該包內(nèi)部的字段。標(biāo)識196還包括方法標(biāo)記。
圖8A-8I是說明用于分配標(biāo)記以及構(gòu)造虛擬方法表和接口方法表的處理流程圖。如上面討論的,這些處理可以由轉(zhuǎn)換器72完成?,F(xiàn)在參照圖8A,示出用于分配包標(biāo)記的處理230。一般地,來自CAP文件內(nèi)的包標(biāo)識被分配僅在CAP文件中使用的標(biāo)記。
處理230首先包含輸入包(步驟231)的清單。該清單可以是任何順序的。接著,處理230檢查輸入的包數(shù)量是否超過預(yù)定的閾值如127(步驟232)。在這種情況下,使用127這個限制來表示一個8位包標(biāo)記,其高位被保留。如果輸入包的數(shù)量超過預(yù)定的閾值如127,則處理失敗(步驟205)。
可替換地,處理230將當(dāng)前標(biāo)記值初始化為“0”(步驟233)。接著,處理230將當(dāng)前包初始化為清單中的第一個包(步驟234)。然后處理230檢查當(dāng)前的包是否為空(步驟235)。如果不是,則處理230將當(dāng)前標(biāo)記分配給當(dāng)前包(步驟236)。接著,處理230將當(dāng)前標(biāo)記值加1(步驟237),以及設(shè)置當(dāng)前包為清單中的下一個包(步驟238)。
從步驟235開始,在當(dāng)前包為空的情況下,表示沒有更多的輸入包,處理230將標(biāo)記記錄在輸入組件中(步驟239)并退出。對于輸入包中項的標(biāo)識使用記錄在輸入組件中的標(biāo)記值。
現(xiàn)在轉(zhuǎn)到圖8B,示出了用于分配類和接口標(biāo)記的處理240。處理240首先獲得一個公共類和接口的任意排序的清單(步驟241)。接著,它檢查是否類和接口的數(shù)量超過預(yù)定值如256,256是可以用8位表示的最大的類數(shù)量(步驟242)。如果是這樣,處理240失敗(步驟205)??商鎿Q地,處理240將當(dāng)前標(biāo)記值初始化為“0”(步驟243)。它也將當(dāng)前項初始化到在步驟241獲得的清單中的第一類或接口(步驟244)。接著,處理240確定當(dāng)前項是否為空,即表示不再有類或接口保留在清單中(步驟245)。如果不是,處理240分配當(dāng)前標(biāo)記值給當(dāng)前項,當(dāng)前項可以是一個類或一個接口項(步驟246)。接著,在返回步驟245之前,處理240將當(dāng)前標(biāo)記值加1(步驟247)并且設(shè)置當(dāng)前項為清單中的下一類或接口(步驟248)。從步驟245開始,在當(dāng)前項為空的情況下,即表示在清單中沒有類或接口存在,處理240將標(biāo)記值記錄在輸出組件表中(步驟249)。另外,處理240公開輸出文件中的標(biāo)記值(步驟251)并退出。
圖8C-1和圖8C-2處理靜態(tài)字段標(biāo)記,圖8C-2是內(nèi)嵌編譯時間常數(shù)的圖8C-1的最佳版本。包中的外部可視靜態(tài)字段被分配公開標(biāo)記。包可視的和專用的靜態(tài)字段沒有被分配標(biāo)記。圖8C-2描述了處理250優(yōu)化的處理280。在這個優(yōu)化中,沒有為被初始化成編譯時間常數(shù)的最后靜態(tài)字段分配標(biāo)記。在這種情況下,字段沒有鏈接到卡上。
現(xiàn)在轉(zhuǎn)到圖8C-1,示出了用于分配公共類或接口中的靜態(tài)字段標(biāo)記的處理250。處理250首先獲得公共類或接口中的公共和保護(hù)靜態(tài)字段的任意排序清單(步驟252)。然后處理250設(shè)置當(dāng)前標(biāo)記值為“0”(步驟254)并且將當(dāng)前字段初始化為清單中的第一個靜態(tài)字段(步驟256)。然后處理225確定當(dāng)前字段是否為空,即表示沒有剩余字段(258)。如果不是,處理250將當(dāng)前標(biāo)記值分配給當(dāng)前字段(步驟260)并且將當(dāng)前標(biāo)記值加1(步驟262)。然后在處理250返回步驟258之前,它設(shè)置當(dāng)前字段為清單中的下一個靜態(tài)字段(步驟264)。
從步驟258開始,在當(dāng)前字段為空,即表示沒有剩余字段的情況下,處理250確定是否當(dāng)前標(biāo)記大于預(yù)定的值如255,255是可以用8位表示的最大的標(biāo)記數(shù)(步驟266)。如果是這樣,處理250失敗(步驟205)??商鎿Q地,如果將生成輸出組件,處理250將標(biāo)記值記錄在輸出組件表中(步驟268)。最后,處理250公開輸出文件中的標(biāo)記值(步驟270)。
現(xiàn)在參照圖8C-2,示出了對公共類或接口中靜態(tài)字段標(biāo)記的分配優(yōu)化的處理280。通過去除編譯時間常數(shù)和將標(biāo)識代替直接插入在字節(jié)代碼中的常數(shù),該最優(yōu)化減少了存儲器占用。處理280獲得公共類或接口中公共和保護(hù)靜態(tài)字段的清單(步驟282)。然后處理280設(shè)置當(dāng)前的標(biāo)記值為“0”(步驟284)并且將當(dāng)前字段初始化為清單中第一個靜態(tài)字段(步驟286)。然后處理280檢查是否當(dāng)前字段是空的(沒有字段)(步驟288)。如果不是,處理280確定是否當(dāng)前字段是編譯時間常數(shù)(步驟290)。如果是這樣,處理280分配一個值如0xFF的值作為當(dāng)前字段的標(biāo)記值(步驟296)。另一方面,如果當(dāng)前字段不是編譯時間常數(shù),則處理280將當(dāng)前標(biāo)記值分配給當(dāng)前字段(步驟292)并且將當(dāng)前標(biāo)記值加1(步驟294)。從步驟294和296開始,在循環(huán)回步驟288以繼續(xù)處理標(biāo)記之前,處理280隨后設(shè)置當(dāng)前字段為清單中下一個靜態(tài)字段(步驟298)。
從步驟288開始,在當(dāng)前字段是空的(沒有字段)情況下,該處理檢查是否當(dāng)前標(biāo)記超過預(yù)定的閾值如255,該值是使用8位能夠表示的最大數(shù)(步驟300)。如果是這樣,處理280失敗(步驟205)。另一方面,如果輸出,則處理280將標(biāo)記值記錄在輸出組件上(步驟302)。然后該處理公開具有編譯的時間常數(shù)的輸出文件的標(biāo)記值(步驟304)使得標(biāo)識包能夠在退出之前直接插入相應(yīng)的值。
現(xiàn)在轉(zhuǎn)到圖8D,示出了用于分配公共類中靜態(tài)方法標(biāo)記的處理310。處理310首先獲得公共類中公共和保護(hù)靜態(tài)方法以及構(gòu)造器的清單(步驟312)。然后處理310檢查是否靜態(tài)方法的數(shù)量超過預(yù)定值如256(步驟314)。如果沒有,該處理設(shè)置標(biāo)記值為“0”(步驟316)并且將當(dāng)前方法初始化為清單的第一個靜態(tài)方法(步驟318)。接著,處理310檢查是否當(dāng)前方法是空的(沒有方法)(步驟320)。如果不是,處理310將當(dāng)前標(biāo)記值分配給當(dāng)前靜態(tài)方法(步驟322)并且將當(dāng)前標(biāo)記值加1(步驟324)。然后在環(huán)返回步驟320之前,處理310設(shè)置當(dāng)前方法為清單中下一個靜態(tài)方法(步驟326)。
從步驟320開始,如果當(dāng)前方法是空的(沒有方法),則該處理將標(biāo)記值記錄在輸出組件(步驟328)并且在退出之前公開輸出文件中的標(biāo)記值(步驟330)。
圖8E-1和圖8E-2涉及實例字段分配方案。圖8E-1示出分配字段標(biāo)記的一般處理,而圖8E-2是一個優(yōu)化的處理,它將標(biāo)記分配擴(kuò)展到內(nèi)部(或包可視和專用的)字段、類型標(biāo)識的組字段并且允許將標(biāo)記容易地映射到實例內(nèi)的偏置。
現(xiàn)在轉(zhuǎn)到圖8E-1,示出了用于分配公共類中實例字段標(biāo)記的處理340。首先,處理340獲得公共類中公共和保護(hù)實例字段的清單(步驟342)。然后它檢查是否實例字段的數(shù)量超過預(yù)定的值如256(步驟344),如果是這樣,則處理失敗(步驟205)。另一方面,處理340設(shè)置當(dāng)前標(biāo)記值為“0”(步驟346)并且將當(dāng)前字段初始化為清單中第一個字段(步驟348)。接著,處理340檢查是否當(dāng)前字段是空的(步驟350)。如果不是,處理340將當(dāng)前標(biāo)記值分配給當(dāng)前實例字段(步驟352)并且將當(dāng)前標(biāo)記值加1(步驟354)。從步驟354開始,在循環(huán)回到步驟350之前,該處理設(shè)置當(dāng)前字段為清單中下一個實例字段(步驟360)。從步驟350開始,在當(dāng)前字段是空的情況下,處理340公開輸出文件中的標(biāo)記值(步驟362)并且退出。
在優(yōu)化圖8E-1的一般方法中可以考慮各種因素。一般地,標(biāo)記的排序是靈活的,使得標(biāo)記安排可以適用于特定的實現(xiàn)。圖8E-2描述了如下面例子中示出的限定分配方案


現(xiàn)在參照圖8E-2,示出了用于上面實例字段標(biāo)記分配優(yōu)化的處理370。如上所述,處理370獲得類中所有實例字段的清單(步驟372)。接著,處理370檢查是否編號的實例字段超過預(yù)定的值如256(步驟374)。如果是這樣,處理370失敗(步驟205),而如果不是這樣,處理370將清單分類為包括首先是公共和保護(hù)原語類型、其次是公共和保護(hù)標(biāo)識類型、再其次是包和原語標(biāo)識類型、最后是包和專用的原語類型的種類(category)(步驟376)。標(biāo)記值被設(shè)置為“0”(步驟378)并且當(dāng)前字段被初始化為清單的第一個實例字段(步驟380)。接著,處理370檢查是否當(dāng)前字段是空的(步驟382)。如果不是,該處理將當(dāng)前標(biāo)記值分配給當(dāng)前字段(步驟384)并且將當(dāng)前標(biāo)記值加1(步驟386)。然后處理370確定是否當(dāng)前字段是整數(shù)類型(步驟388)。整數(shù)類型占用兩個時隙以允許標(biāo)記容易地映射到實例。如果是這樣,當(dāng)前標(biāo)記值加1(步驟390)。從步驟388或從步驟390開始,在循環(huán)回步驟382之前,處理370將當(dāng)前字段設(shè)置為清單中下一個實例字段(步驟392)。
從步驟382開始,如果當(dāng)前字段是空的,則在退出之前處理370公開輸出文件中公共和保護(hù)實例字段的標(biāo)記值(步驟394)。
圖8F-1和圖8F-2分配虛擬方法的標(biāo)記。圖8F-1示出用于虛擬方法標(biāo)記分配的一般方案,而圖8F-2將標(biāo)記分配擴(kuò)展到包可視虛擬方法。
現(xiàn)在參照圖8F-1和圖8F-2,示出了用于分配虛擬方法標(biāo)記的處理。一般地,在包中定義的虛擬方法被分配為可輸出的或內(nèi)部標(biāo)記??奢敵龅臉?biāo)記分配給公共和保護(hù)的虛擬方法;在這種情況下,該標(biāo)記的高位是“0”。內(nèi)部標(biāo)記分配給包可視虛擬方法;在這種情況下標(biāo)記的高位是“1”。因為高位被保留,所以這些標(biāo)記的區(qū)域范圍從0到127。
用于類中外部可視引入的虛擬方法的可輸出標(biāo)記是從大于該類的超級類(superclass)的最高編號的可輸出虛擬方法標(biāo)記的那一個開始連續(xù)編號的。如果一種方法優(yōu)于該類的超級類中實現(xiàn)的方法,則該方法使用如超級類中相應(yīng)方法的相同的標(biāo)記號,使得該占優(yōu)的方法可以被識別為相關(guān)于它們優(yōu)于的方法。
內(nèi)部虛擬方法標(biāo)記的分配不同于可輸出的虛擬方法標(biāo)記。如果在相同包中定義一個類和它的超級類,則用于該類中包可視的引入虛擬方法的標(biāo)記從大于該類的超級類的最高編號的內(nèi)部虛擬方法標(biāo)記的那一個開始連續(xù)編號。如果在不同的包中定義該類和它的超級類,則用于該類中包可視引入虛擬方法的標(biāo)記從“0”開始連續(xù)編號。如果該方法優(yōu)于類的超級類中實現(xiàn)的方法,則該方法使用如超級類中相應(yīng)的方法的相同標(biāo)記號碼。對于背景信息,Java編程語言的定義規(guī)定如果在相同的包中定義類和它的超級類,則優(yōu)于包可視虛擬方法才是可能的。包含虛擬方法標(biāo)記的字節(jié)的高位總是被設(shè)置為“1”,以表示它是內(nèi)部標(biāo)記。沒有規(guī)定類中引入的包虛擬方法標(biāo)記的排序。
在圖8F-1中,處理400首先獲得一個類中公共和保護(hù)虛擬方法的清單(步驟402)。然后處理400檢查是否該類具有超級類(步驟404)。如果是這樣,處理400進(jìn)一步檢查是否超級類在相同的包中(步驟406)。從步驟406開始,在超級類在相同包中的情況下,該處理找出超級類(步驟408)并且獲得該超級類的虛擬方法和標(biāo)記(步驟412)。虛擬方法的集合包括定義該類所有超級類的那些內(nèi)容。從步驟406開始,在超級類不在相同包的情況下,處理400在輸入包的輸出文件中找出超級類(步驟410)并且隨后轉(zhuǎn)到步驟412。從步驟412開始,處理400將當(dāng)前標(biāo)記值初始化為最大的超級類虛擬方法標(biāo)記并且將它的值加1(步驟414),以確保在該體系內(nèi)沒有標(biāo)記沖突。
從步驟404開始,在該類不具有超級類的情況下,處理400將當(dāng)前標(biāo)記值初始化為“0”(步驟416)。從步驟414或步驟416開始,處理400將當(dāng)前方法初始化為清單中第一個虛擬方法(步驟418)。接著,處理400確定是否當(dāng)前方法是空的(步驟420)。如果不是,則該處理確定是否當(dāng)前虛擬方法由超級類定義(步驟422)。如果是這樣,則在循環(huán)回步驟420之前,該方法是占優(yōu)的方法并且將相同的標(biāo)記值分配給當(dāng)前方法作為分配給超級類中占優(yōu)方法的標(biāo)記值(步驟424)。
從步驟422開始,在當(dāng)前虛擬方法沒有被超級類定義的情況下,它是一種引入的方法。在這種情況下,超級類400將當(dāng)前標(biāo)記值分配給當(dāng)前方法(步驟426)并且將當(dāng)前標(biāo)記值加1(步驟428)。然后在循環(huán)回步驟420之前,處理400設(shè)置當(dāng)前方法為清單中下一個方法(步驟430)。從步驟420開始,在當(dāng)前方法是空的情況下,處理400檢查是否當(dāng)前標(biāo)記值超過預(yù)定值如127(步驟432)。如果是這樣,則處理400失敗(步驟205)。另一方面,如果標(biāo)記值不大于127,則在退出之前,處理400公開輸出文件中的標(biāo)記值以及繼承的方法和它們的標(biāo)記值(步驟434)。圖8F-1的處理也可以用于分配標(biāo)記到如圖8F-2所示的包可視類中的公共和保護(hù)虛擬方法。
在圖8F-2中,示出了用于將標(biāo)記分配擴(kuò)展到類中包可視虛擬方法的處理440。處理440首先獲得該類中包可視虛擬方法的清單(步驟442)。接著,它檢查是否該類具有超級類(步驟444)。如果是這樣,則該處理檢查是否超級類在相同的包中(步驟446)。如果是這樣,則處理440找出相同包中的超級類(步驟448),獲得超級類的包可視虛擬方法和標(biāo)記(步驟450)并且將當(dāng)前標(biāo)記值初始化為最大的超級類虛擬方法標(biāo)記加1(步驟452)以避免包范圍的體系內(nèi)的標(biāo)記沖突。這確保先前在超級類內(nèi)分配的標(biāo)記值不再用于引入的方法。應(yīng)該注意步驟450可以遞歸地達(dá)到相同包的超級類。
從步驟444開始,在一個類不具有超級類的情況下,或者從步驟446開始,在超級類不在相同包的情況下,處理440設(shè)置當(dāng)前標(biāo)記值為“0”(步驟454)。特別地,如果超級類不在相同包中,則該超級類的包可視虛擬方法是不可以使用的并且因此不包括在步驟454中。如上面圖9D-2和圖9D-3中描述的,這些可能的方法用于解釋何時判定虛擬方法的標(biāo)識。
從步驟452或步驟454開始,處理440將當(dāng)前方法初始化為清單中第一個虛擬方法(步驟456)。接著,處理440檢查是否當(dāng)前方法是空的(步驟458)。如果不是,處理440檢查是否當(dāng)前虛擬方法由超級類定義(步驟460)。在這種情況下,該方法是占優(yōu)的方法。如果是這樣,在循環(huán)回步驟458之前,處理440如分配給超級類中占優(yōu)方法一樣來分配相同的標(biāo)記值給當(dāng)前方法(步驟462)。
從步驟460開始,如果當(dāng)前虛擬方法沒有被它的超級類定義,則它是一種引入的方法。在這種情況下,處理440分配當(dāng)前標(biāo)記值給當(dāng)前方法并且設(shè)置高位為“1”(步驟464)。虛擬方法標(biāo)記的高位用于確定是否它是公共或?qū)S锰摂M方法標(biāo)記。接著,在循環(huán)回步驟458之前,處理440將當(dāng)前標(biāo)記值加1(步驟466)并且設(shè)置當(dāng)前方法為清單中下一個方法(步驟468)。
在步驟458,在當(dāng)前方法是空的情況下,在步驟470,處理440確定是否當(dāng)前標(biāo)記值超過一個值如127(它是用8位可以表示的最大的數(shù),高位被保留)。如果是這樣,則處理440失敗(步驟205)。另一方面,在當(dāng)前標(biāo)記值在區(qū)域內(nèi)的情況下,處理440退出。注意用于包可視虛擬方法的標(biāo)記被內(nèi)部使用并且不輸出。
虛擬方法標(biāo)識僅可以在執(zhí)行期間判定。虛擬方法表允許該卡確定哪種方法根據(jù)該方法的類的標(biāo)記以及實例來調(diào)用。標(biāo)記值用作到虛擬方法表的索引。圖8G-1示出用于構(gòu)造類中公共虛擬方法表的處理480。首先,獲得該類中公共和保護(hù)虛擬方法的清單(步驟482)。接著,處理480獲得超級類的虛擬方法和標(biāo)記(步驟484)。步驟484是遞歸的,包括類中所有的超級類。然后處理480創(chuàng)建一個表,通過標(biāo)記值對虛擬方法排序(步驟486)并且去除重復(fù)的虛擬方法。對于占優(yōu)的方法產(chǎn)生重復(fù)。在這種情況下,在方法表中表示在當(dāng)前類中定義的方法來代替超級類中定義的那一個。然后在退出之前,處理480在步驟488設(shè)置對于最大虛擬方法標(biāo)記類的計數(shù)并且將表格和計數(shù)記錄在類組件中(步驟490)。
現(xiàn)在轉(zhuǎn)到圖8G-2,示出了優(yōu)化類中公共虛擬方法表的結(jié)構(gòu)的處理500。處理500通過去除超級類的虛擬方法表中疊加的元素來減小存儲虛擬方法表所需的尺寸。
處理500首先獲得類中公共和保護(hù)虛擬方法的清單(步驟502)。接著,獲得超級類的虛擬方法和標(biāo)記(步驟504)。步驟504是遞歸的,包括該類中所有的超級類。接著,處理500通過標(biāo)記值將在步驟502和步驟504獲得的虛擬方法排序來初始化一個表格(步驟506)。這個處理假定該處理具有至少一個入口。然后處理500將計數(shù)初始化為最大的虛擬方法標(biāo)記加上1(步驟508)。處理500還設(shè)置基本計數(shù)為“0”(步驟510)。接著,處理500檢查是否該計數(shù)是正的(步驟512)。如果是這樣,該處理檢查是否表中第一個入口由當(dāng)前類定義(步驟514)。如果不是,該處理從表格中去除該方法并且將表中剩余的方法移上來(步驟518)。然后在循環(huán)回步驟512之前,處理500將計數(shù)減“1”(步驟520)并且將基本計數(shù)加“1”(步驟522)。
從步驟514開始,在當(dāng)前類中定義第一個入口的情況下,或者在步驟512該計數(shù)是“0”的情況下,在退出之前,處理500轉(zhuǎn)到將表格、計數(shù)和基數(shù)記錄在類組件中(步驟516)。
圖8H-1和圖8H-2示出用于分配公共接口中接口方法標(biāo)記的處理524。特別地,圖8H-2更詳細(xì)地示出圖8H-1的步驟526。
現(xiàn)在參照圖8H-1,處理524分配公共接口中的接口方法標(biāo)記。處理524初始地獲得公共接口中一組接口方法(步驟525)。接著,處理524獲得接口的超級接口(superinterface)的清單(步驟526)。這個操作在圖8H-2中更詳細(xì)地定義。然后處理524將由接口和它的超級接口定義的方法集合和并(步驟527)。接著,處理524檢查是否有大于256個方法存在(步驟529)。如果是這樣,則處理524失敗(步驟205)。否則,如果存在小于256個方法,則處理524將當(dāng)前標(biāo)記值設(shè)置為“0”(步驟530)并且將當(dāng)前方法初始化為方法集合的方法中第一個方法(步驟532)。接著,處理524檢查是否當(dāng)前方法是空的(步驟533)。如果不是,處理524將當(dāng)前標(biāo)記值分配給當(dāng)前接口方法(步驟534),將當(dāng)前標(biāo)記值加1(步驟535),以及在循環(huán)回步驟533之前設(shè)置當(dāng)前方法為集合中下一個方法(步驟536)。
從步驟533開始,如果當(dāng)前方法是空的,處理524公開輸出文件中與接口相關(guān)的超級接口清單和方法標(biāo)記值(步驟537)并且退出。
現(xiàn)在參照圖8H-2,它更詳細(xì)地示出圖8H-1的步驟526。首先,圖8H-2的處理選擇一個接口(步驟682)。接著,它獲得該接口繼承的接口清單(步驟684)并且將當(dāng)前接口設(shè)置為清單中第一個接口(步驟686)。接著,圖8H-2的處理將結(jié)果集合初始化為空集合(步驟688)。從步驟688開始,圖8H-2的處理迭代地將接口加到結(jié)果集合中。通過首先檢查是否當(dāng)前接口是空的,即表示沒有其他接口需要處理來完成這一點(步驟690)。如果不是,該處理獲得一個當(dāng)前接口的超級接口集合(步驟692)。步驟692遞歸地調(diào)用處理526。
一旦完成步驟692,圖8H-2的處理將超級接口集合加到結(jié)果集合(步驟694)以及將當(dāng)前接口加到結(jié)果集合(步驟696)。然后該處理設(shè)置當(dāng)前接口為下一個接口(步驟698)并且循環(huán)回步驟690以繼續(xù)處理所有的接口。從步驟690開始,在當(dāng)前接口是空的情況下,圖8H-2的處理通過返回結(jié)果集合而退出。
接口表包含一個入口,用于類直接實現(xiàn)的每個接口以及用于直接實現(xiàn)接口的所有超級接口。接口表中每個入口包含接口的識別和接口方法表。該表格將接口方法的宣布映射到類的實現(xiàn)中。
圖8I-1和圖8I-2示出用于構(gòu)造類的接口表的處理700。特別地,圖8I-2更詳細(xì)地示出圖8I-1的步驟708。
圖8I-1示出了用于構(gòu)造接口表的處理700。首先,處理700獲得接口的清單,包括超級接口,(見處理526)它通過當(dāng)前類實現(xiàn)(步驟702)。接著,處理700將當(dāng)前接口設(shè)置為這個集合中第一個接口(步驟704)。然后處理700檢查是否當(dāng)前接口是空的,這表示它已經(jīng)完成(步驟706)。如果不是,處理700轉(zhuǎn)到構(gòu)造用于類的當(dāng)前接口的接口方法表(步驟708),如圖8I-2更詳細(xì)示出。接著,在循環(huán)回步驟706之前,處理700設(shè)置當(dāng)前接口為下一個接口(步驟710)。
從步驟706開始,在當(dāng)前接口是空的情況下,在退出之前,處理700將具有它們接口方法表的接口記錄在類組件中(步驟712)。
現(xiàn)在參照圖8I-2,它更詳細(xì)地示出步驟708。這個處理首先獲得該類的虛擬方法表(步驟722)以及用于接口的接口方法和標(biāo)記,包括繼承的方法(步驟724)。接著,圖8I-2的處理通過用它們的標(biāo)記值將方法排序來初始化接口方法表(步驟726)。然后該處理將當(dāng)前方法設(shè)置為接口方法表的第一個方法(步驟728)。從步驟728開始,該處理檢查是否當(dāng)前方法是空的即表示它已經(jīng)完成(步驟730)。如果不是,圖8I-2的處理找出虛擬方法表中接口方法的一個實現(xiàn)(步驟732)。接著,該處理將接口方法表的虛擬方法的標(biāo)記值記錄在當(dāng)前方法的位置(步驟734)。然后在循環(huán)回步驟730之前,它將當(dāng)前方法設(shè)置為當(dāng)前接口的下一個方法(步驟736)。從步驟730開始,在當(dāng)前方法是空的情況下,圖8I-2的處理退出。
下面在圖9A-9C中討論執(zhí)行期間元素的動態(tài)結(jié)合,它將標(biāo)識判定描述為動態(tài)元素。在編譯期間,不能對于特定的實現(xiàn)判定出轉(zhuǎn)換和標(biāo)記分配、對實例字段的標(biāo)識、虛擬方法和接口方法,而僅僅能夠判定出該項的抽象描述。
在實例字段的情況下,在定義類的范圍內(nèi)分配標(biāo)記。該類的一個實例包含不僅由類定義,而且由所有它的超級類定義的所有字段。該標(biāo)記不表示該實例內(nèi)字段的位置,因為它們不反映該實例的特定安排并且不能解釋由超級類定義的專用和包可視字段的位置。
在虛擬方法的情況下,在編譯和轉(zhuǎn)換期間,名稱和類型特征標(biāo)記以及實現(xiàn)這樣一種方法的體系內(nèi)的類是公知的。然而,當(dāng)根據(jù)調(diào)用的方法可能確定實例的特定類時,直到執(zhí)行為止才能知道精確的實現(xiàn)。例如,類A和它的超級類B實現(xiàn)方法定義M。直到執(zhí)行為止才能知道是否編譯時類型B的實例的方法M的調(diào)用將導(dǎo)致執(zhí)行類A或類B的實現(xiàn)。
為了在執(zhí)行期間提供適當(dāng)?shù)貍魉吞摂M方法調(diào)用的手段,虛擬方法標(biāo)記分配在類體系的范圍內(nèi)。即優(yōu)于超級類繼承鏈中先前引入方法的子類的方法必須具有如它優(yōu)于的方法的相同標(biāo)記值。同時,引入的方法(不優(yōu)于超級類中定義方法的那些方法)必須具有在繼承鏈內(nèi)唯一的標(biāo)記值。對于每個類定義虛擬方法表以提供將虛擬方法標(biāo)記映射到特定的實現(xiàn)的手段。
接口方法類似于虛擬方法,這在于直到執(zhí)行時才可以知道特定的實現(xiàn),但它們的不同在于接口方法不能從多個接口繼承。接口的多個繼承引起一個問題,即虛擬方法標(biāo)記分配的方式。優(yōu)于多個接口引入的方法的類的方法不需要具有如它優(yōu)于的方法相同的標(biāo)記值,因為多個定義可以都具有不同的值。因此,對于一個特定接口的每組方法被分配標(biāo)記值,而不用考慮任何其他接口的方法標(biāo)記值。
因為各接口不共享標(biāo)記值,需要另外的信息來將接口方法調(diào)用傳送到特定的方法實現(xiàn)。因為接口方法標(biāo)記在接口范圍內(nèi)是唯一的,需要接口方法標(biāo)記和接口的識別來確定執(zhí)行時由實例的類實現(xiàn)的方法。對于將接口識別映射到接口方法表的每個類定義一個接口表。該接口方法表對于該接口將接口方法標(biāo)記映射到該類的方法實現(xiàn)。
圖9A-9C是說明在執(zhí)行期間用于判定標(biāo)記的處理流程圖?,F(xiàn)在參照圖9A,示出了用于判定實例字段標(biāo)識的處理580。首先,處理580獲得包含來自運行時堆棧的字段的實例(步驟582)。接著,處理580確定與該字段相關(guān)的標(biāo)記并且將該標(biāo)記映射到索引(步驟584)。從標(biāo)記到索引的映射可以要求檢驗實例字段類型信息。另外,該操作可以要求通過超級類的實例的大小調(diào)節(jié)標(biāo)記值。最后,在退出之前處理580使用索引以找出實例中字段的表示(步驟586)。
在圖9B-1中,示出了對于公共或保護(hù)虛擬方法判定標(biāo)識的處理620。首先,處理620從運行時堆棧獲得類的實例(步驟621)并且確定實例的類(步驟622)。接著,處理620存取類的公共虛擬方法表(步驟624)并且使用該方法標(biāo)記作為索引獲得方法表入口(步驟626)。最后,處理620根據(jù)虛擬方法表的入口內(nèi)容找出并且執(zhí)行該方法(步驟628)以及退出。
現(xiàn)在轉(zhuǎn)到圖9B-2,示出了對于任何虛擬方法(包括包可視的)判定標(biāo)識的處理600。首先,處理600從運行時堆棧獲得類的實例(步驟601)并且確定該實例的類(步驟602)。接著,處理600確定是否該方法標(biāo)記的高位被設(shè)置為“1”(步驟604)。如果不是,處理600獲得公共虛擬方法表(步驟606)并且使用方法標(biāo)記作為到虛擬方法表的索引(步驟608)。從步驟604開始,在方法標(biāo)記的高位等于“1”的情況下,處理600將高位設(shè)置為“0”(步驟610)并且在轉(zhuǎn)到步驟608之前獲得包虛擬方法表(步驟612)。最后,根據(jù)虛擬方法表的入口內(nèi)容,處理600找出并且執(zhí)行該方法(步驟614)以及退出。
圖9B-3示出使用如圖8G-2描述的優(yōu)化虛擬方法表,用于判定對任何虛擬方法的標(biāo)識的優(yōu)化處理670。首先,處理670從運行時堆棧獲得類的實例(步驟671)并且將當(dāng)前類設(shè)置為實例的類(步驟672)。一個方法表索引被初始化為方法標(biāo)記值(步驟674)。然后處理670確定是否該方法標(biāo)記的高位等于“1”(步驟676)。如果不是,處理670對于當(dāng)前類的公共方法表的基數(shù)設(shè)置一個基數(shù)值(步驟678)。接著,該方法表被設(shè)置為當(dāng)前類的公共虛擬方法表(步驟680)。然后處理670檢查是否該方法表索引小于該基數(shù)值(步驟682),如果是這樣,則將當(dāng)前類設(shè)置為當(dāng)前類的超級類(步驟684)。從步驟684開始,處理670循環(huán)回步驟676以繼續(xù)處理。
在步驟676,如果高位等于“1”,則處理670將方法表索引的高位設(shè)置為“0”(步驟690)。在繼續(xù)步驟682之前,它設(shè)置基數(shù)值為當(dāng)前類的包方法表基數(shù)(步驟692)并且將該方法表設(shè)置為當(dāng)前類的包虛擬方法表(步驟694)。
從步驟682開始,如果該方法表索引大于該基數(shù),處理670使用方法表索引加上基數(shù)值獲得一個方法表入口(步驟686)。然后處理670根據(jù)當(dāng)前類的方法表中入口的內(nèi)容找到該方法(步驟688)。接著,處理670退出。
現(xiàn)在參照圖9C,示出了判定接口方法標(biāo)識的處理650。首先,處理650從運行時堆棧獲得類的實例(步驟651)并且將當(dāng)前類設(shè)置為實例的類(步驟652)。接著,處理650搜索當(dāng)前類的接口表中規(guī)定的接口(步驟654)。然后該處理確定是否接口已經(jīng)被發(fā)現(xiàn)(步驟656)。如果不是,則在循環(huán)回步驟654之前,該處理將當(dāng)前類設(shè)置為當(dāng)前類的超級類(步驟660)。
從步驟656開始,在找到規(guī)定接口的情況下,處理650獲得當(dāng)前類中相應(yīng)的接口方法表(步驟662)。然后它從表格的入口獲得虛擬方法標(biāo)記,該表格的索引等于接口方法標(biāo)記(步驟664)。然后處理650獲得實例的類的公共虛擬方法表(步驟666)。處理650從與虛擬方法標(biāo)記相關(guān)的表格入口獲得虛擬方法位置(步驟668)。然后處理650根據(jù)虛擬方法表中入口的內(nèi)容定位方法(步驟669)。一旦完成這一點,處理650退出。
雖然相對于智能卡實現(xiàn)說明了本發(fā)明,但是本發(fā)明也可以應(yīng)用于具有小腳印的其它裝置,如在存儲器或計算功率或速度中被相對限定或限制的裝置。除此之外,這種資源受限裝置可以包括邊界掃描裝置、字段可編程裝置、尋呼機(jī)和蜂窩式電話。當(dāng)在它們之間存在共享對象可以使用服務(wù)器小應(yīng)用程序(servlet)時,本發(fā)明可以證明是有益的。某些臺式機(jī)系統(tǒng)也可以利用本發(fā)明的技術(shù)。
本發(fā)明還涉及用于完成這些操作的設(shè)備。這種設(shè)備可以特別地構(gòu)造用于所需的目的或者它可以包括通用計算機(jī),作為由存儲在計算機(jī)中的計算機(jī)程序選擇地激活或重新配置。這里表現(xiàn)的過程并不固有地相關(guān)于特定的計算機(jī)或其它設(shè)備。不同的通用機(jī)可以使用根據(jù)這里的技術(shù)所寫的程序,或者它可以更加方便地構(gòu)造更特定的設(shè)備來完成所需的方法步驟。由上面給出的描述表現(xiàn)了對于這些不同的機(jī)器所需的結(jié)構(gòu)。另外,應(yīng)該理解符合本發(fā)明的虛擬機(jī)能夠提供早期虛擬機(jī)沒有的功能,如JavaTM虛擬機(jī)規(guī)范中描述的虛擬機(jī)。
JavaTM編程語言和平臺適用于本發(fā)明,同時具有某些特性的語言或平臺也將適用于實現(xiàn)本發(fā)明。這些特性包括類型安全、指針安全、面向?qū)ο蟆討B(tài)鏈接以及基于虛擬機(jī)。并不是所有這些特性需要出現(xiàn)在特定的實現(xiàn)中。在某些實施例中,可以使用缺少這些特性中一個或多個的語言或平臺?!疤摂M機(jī)”能夠用位(虛擬機(jī))或硅片(實際的/物理機(jī)/專用集成電路)實現(xiàn)。同樣,雖然說明的本發(fā)明表明是逐個對象安全的,但是本發(fā)明也可以使用其他的方法如逐個類安全的。
本發(fā)明的系統(tǒng)可以用硬件或計算機(jī)程序?qū)崿F(xiàn)。每個這樣的計算機(jī)程序可以存儲在存儲介質(zhì)或裝置中(例如,CD-ROM,硬盤或磁盤),當(dāng)存儲介質(zhì)或裝置由計算機(jī)讀出以實現(xiàn)描述的過程時,它可以由通用或?qū)S每删幊逃嬎銠C(jī)讀出用于配置和操作計算機(jī)。該系統(tǒng)也可以作為計算機(jī)可讀存儲介質(zhì)實現(xiàn),采用計算機(jī)程序來配置,這里這樣配置存儲介質(zhì)使得計算機(jī)以特定的和預(yù)定的方式工作。
這里的程序一般用導(dǎo)致所需結(jié)果的自相容序列步驟。這些步驟要求實際參數(shù)的實際操作。雖然通常不需要,但是這些參數(shù)采用電或磁的信號形式,能夠存儲、傳送、組合、比較以及進(jìn)行其他操作。它常常證明是方便的,主要是公共使用的原因,將這些信號表示為位、值、元素、符號、字符、項、數(shù)字等。然而,應(yīng)該注意所有的這些和類似的項與適當(dāng)?shù)膶嶋H參數(shù)有關(guān)并且只是方便應(yīng)用于這些參數(shù)的標(biāo)號。
盡管參照實施例示出和描述了本發(fā)明,但是本領(lǐng)域的技術(shù)人員應(yīng)該理解在形式上和細(xì)節(jié)上的變化并沒有背離下面權(quán)利要求書的精神和范圍。
其他的實施例也在下面權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
1.一種用于實現(xiàn)適用于在一資源受限的裝置上執(zhí)行的小的虛擬機(jī)的方法,該方法包括在一資源豐富裝置上執(zhí)行一處理功能;記錄所述執(zhí)行的結(jié)果;及使用一或多個標(biāo)記將所述結(jié)果傳送給一資源受限裝置,所述資源受限裝置被構(gòu)成以使用一或多個標(biāo)記來替代執(zhí)行所述處理功能。
2.如權(quán)利要求1所述的方法,其中所述處理功能包括標(biāo)識一或多個靜態(tài)字段的位置。
3.如權(quán)利要求2所述的方法,其中所述一或多個靜態(tài)字段包括一或多個內(nèi)部靜態(tài)字段。
4.如權(quán)利要求2所述的方法,其中所述一或多個靜態(tài)字段包括一或多個外部靜態(tài)字段。
5.如權(quán)利要求1所述的方法,其中所述處理功能包括標(biāo)識一或多個靜態(tài)方法的位置。
6.如權(quán)利要求5所述的方法,其中所述一或多個靜態(tài)方法包括一或多個內(nèi)部靜態(tài)方法。
7.如權(quán)利要求5所述的方法,其中所述一或多個靜態(tài)方法包括一或多個外部靜態(tài)方法。
8.如權(quán)利要求1所述的方法,其中所述處理功能包括標(biāo)識一或多個類的位置。
9.如權(quán)利要求8所述的方法,其中所述一或多個類包括一或多個內(nèi)部類。
10.如權(quán)利要求8所述的方法,其中所述一或多個類包括一或多個外部類。
11.如權(quán)利要求1所述的方法,其中所述處理功能包括標(biāo)識一類實例內(nèi)的一或多個實例字段的位置,所述一或多個標(biāo)記包括一或多個索引。
12.如權(quán)利要求1所述的方法,其中所述處理功能包括標(biāo)識一類虛擬方法表中的一或多個虛擬方法的位置,所述一或多個標(biāo)記包括一或多個索引。
13.如權(quán)利要求1所述的方法,其中所述處理功能包括標(biāo)識一類接口方法表內(nèi)的一或多個接口方法的位置,所述一或多個標(biāo)記包括一或多個索引。
14.如權(quán)利要求1所述的方法,其中所述處理功能包括標(biāo)識可被輸出的一或多個靜態(tài)公共項的位置。
15.一種用于實現(xiàn)適用于在一資源受限的裝置上執(zhí)行的小的虛擬機(jī)的設(shè)備,該設(shè)備包括執(zhí)行裝置,用于在一資源豐富裝置上執(zhí)行一處理功能;記錄裝置,用于記錄所述執(zhí)行的結(jié)果;及傳送裝置,用于使用一或多個標(biāo)記將所述結(jié)果傳送給一資源受限裝置,所述資源受限裝置被構(gòu)成以使用一或多個標(biāo)記來替代執(zhí)行所述處理功能。
16.如權(quán)利要求15所述的設(shè)備,其中所述處理功能包括標(biāo)識一或多個靜態(tài)字段的位置。
17.如權(quán)利要求16所述的設(shè)備,其中所述一或多個靜態(tài)字段包括一或多個內(nèi)部靜態(tài)字段。
18.如權(quán)利要求16所述的設(shè)備,其中所述一或多個靜態(tài)字段包括一或多個外部靜態(tài)字段。
19.如權(quán)利要求15所述的設(shè)備,其中所述處理功能包括標(biāo)識一或多個靜態(tài)方法的位置。
20.如權(quán)利要求19所述的設(shè)備,其中所述一或多個靜態(tài)方法包括一或多個內(nèi)部靜態(tài)方法。
21.如權(quán)利要求19所述的設(shè)備,其中所述一或多個靜態(tài)方法包括一或多個外部靜態(tài)方法。
22.如權(quán)利要求15所述的設(shè)備,其中所述處理功能包括標(biāo)識一或多個類的位置。
23.如權(quán)利要求22所述的設(shè)備,其中所述一或多個類包括一或多個內(nèi)部類。
24.如權(quán)利要求22所述的設(shè)備,其中所述一或多個類包括一或多個外部類。
25.如權(quán)利要求15所述的設(shè)備,其中所述處理功能包括標(biāo)識一類實例內(nèi)的一或多個實例字段的位置,所述一或多個標(biāo)記包括一或多個索引。
26.如權(quán)利要求15所述的設(shè)備,其中所述處理功能包括標(biāo)識一類虛擬方法表中的一或多個虛擬方法的位置,所述一或多個標(biāo)記包括一或多個索引。
27.如權(quán)利要求15所述的設(shè)備,其中所述處理功能包括標(biāo)識一類接口方法表內(nèi)的一或多個接口方法的位置,所述一或多個標(biāo)記包括一或多個索引。
28.如權(quán)利要求15所述的設(shè)備,其中所述處理功能包括標(biāo)識可被輸出的一或多個靜態(tài)公共項的位置。
29.一種用于實現(xiàn)適用于在一資源受限的裝置上執(zhí)行的小的虛擬機(jī)的方法,該方法包括接收一或多個標(biāo)記,該一或多個標(biāo)記包括在一資源豐富裝置上執(zhí)行一處理功能的結(jié)果;及在所述資源受限裝置上使用所述一或多個標(biāo)記來替代執(zhí)行所述處理功能。
30.如權(quán)利要求29所述的方法,其中所述處理功能包括標(biāo)識一或多個靜態(tài)字段的位置。
31.如權(quán)利要求30所述的方法,其中所述一或多個靜態(tài)字段包括一或多個內(nèi)部靜態(tài)字段。
32.如權(quán)利要求30所述的方法,其中所述一或多個靜態(tài)字段包括一或多個外部靜態(tài)字段。
33.如權(quán)利要求29所述的方法,其中所述處理功能包括標(biāo)識一或多個靜態(tài)方法的位置。
34.如權(quán)利要求33所述的方法,其中所述一或多個靜態(tài)方法包括一或多個內(nèi)部靜態(tài)方法。
35.如權(quán)利要求33所述的方法,其中所述一或多個靜態(tài)方法包括一或多個外部靜態(tài)方法。
36.如權(quán)利要求29所述的方法,其中所述處理功能包括標(biāo)識一或多個類的位置。
37.如權(quán)利要求36所述的方法,其中所述一或多個類包括一或多個內(nèi)部類。
38.如權(quán)利要求36所述的方法,其中所述一或多個類包括一或多個外部類。
39.如權(quán)利要求29所述的方法,其中所述處理功能包括標(biāo)識一類實例內(nèi)的一或多個實例字段的位置,所述一或多個標(biāo)記包括一或多個索引。
40.如權(quán)利要求29所述的方法,其中所述處理功能包括標(biāo)識一類虛擬方法表中的一或多個虛擬方法的位置,所述一或多個標(biāo)記包括一或多個索引。
41.如權(quán)利要求29所述的方法,其中所述處理功能包括標(biāo)識一類接口方法表內(nèi)的一或多個接口方法的位置,所述一或多個標(biāo)記包括一或多個索引。
42.如權(quán)利要求29所述的方法,其中所述處理功能包括標(biāo)識可被輸出的一或多個靜態(tài)公共項的位置。
43.一種用于實現(xiàn)適用于在一資源受限的裝置上執(zhí)行的小的虛擬機(jī)的設(shè)備,該設(shè)備包括接收裝置,用于接收一或多個標(biāo)記,該一或多個標(biāo)記包括在一資源豐富裝置上執(zhí)行一處理功能的結(jié)果;及使用裝置,用于在所述資源受限裝置上使用所述一或多個標(biāo)記來替代執(zhí)行所述處理功能。
44.如權(quán)利要求43所述的設(shè)備,其中所述處理功能包括標(biāo)識一或多個靜態(tài)字段的位置。
45.如權(quán)利要求44所述的設(shè)備,其中所述一或多個靜態(tài)字段包括一或多個內(nèi)部靜態(tài)字段。
46.如權(quán)利要求44所述的設(shè)備,其中所述一或多個靜態(tài)字段包括一或多個外部靜態(tài)字段。
47.如權(quán)利要求43所述的設(shè)備,其中所述處理功能包括標(biāo)識一或多個靜態(tài)方法的位置。
48.如權(quán)利要求47所述的設(shè)備,其中所述一或多個靜態(tài)方法包括一或多個內(nèi)部靜態(tài)方法。
49.如權(quán)利要求47所述的設(shè)備,其中所述一或多個靜態(tài)方法包括一或多個外部靜態(tài)方法。
50.如權(quán)利要求43所述的設(shè)備,其中所述處理功能包括標(biāo)識一或多個類的位置。
51.如權(quán)利要求50所述的設(shè)備,其中所述一或多個類包括一或多個內(nèi)部類。
52.如權(quán)利要求50所述的設(shè)備,其中所述一或多個類包括一或多個外部類。
53.如權(quán)利要求43所述的設(shè)備,其中所述處理功能包括標(biāo)識一類實例內(nèi)的一或多個實例字段的位置,所述一或多個標(biāo)記包括一或多個索引。
54.如權(quán)利要求43所述的設(shè)備,其中所述處理功能包括標(biāo)識一類虛擬方法表中的一或多個虛擬方法的位置,所述一或多個標(biāo)記包括一或多個索引。
55.如權(quán)利要求43所述的設(shè)備,其中所述處理功能包括標(biāo)識一類接口方法表內(nèi)的一或多個接口方法的位置,所述一或多個標(biāo)記包括一或多個索引。
56.如權(quán)利要求43所述的設(shè)備,其中所述處理功能包括標(biāo)識可被輸出的一或多個靜態(tài)公共項的位置。
57.一種資源受限裝置,包括存儲裝置,用于存儲一或多個標(biāo)記,該一或多個標(biāo)記包括在一資源豐富裝置上執(zhí)行一處理功能的結(jié)果;及處理器,被連接至所述存儲器并被構(gòu)成以接收所述一或多個標(biāo)記;且在所述資源受限裝置上使用所述一或多個標(biāo)記來替代執(zhí)行所述處理功能。
58.如權(quán)利要求57所述的資源受限裝置,其中所述處理功能包括標(biāo)識一或多個靜態(tài)字段的位置。
59.如權(quán)利要求58所述的資源受限裝置,其中所述一或多個靜態(tài)字段包括一或多個內(nèi)部靜態(tài)字段。
60.如權(quán)利要求58所述的資源受限裝置,其中所述一或多個靜態(tài)字段包括一或多個外部靜態(tài)字段。
61.如權(quán)利要求57所述的資源受限裝置,其中所述處理功能包括標(biāo)識一或多個靜態(tài)方法的位置。
62.如權(quán)利要求61所述的資源受限裝置,其中所述一或多個靜態(tài)方法包括一或多個內(nèi)部靜態(tài)方法。
63.如權(quán)利要求62所述的資源受限裝置,其中所述一或多個靜態(tài)方法包括一或多個外部靜態(tài)方法。
64.如權(quán)利要求57所述的資源受限裝置,其中所述處理功能包括標(biāo)識一或多個類的位置。
65.如權(quán)利要求64所述的資源受限裝置,其中所述一或多個類包括一或多個內(nèi)部類。
66.如權(quán)利要求64所述的資源受限裝置,其中所述一或多個類包括一或多個外部類。
67.如權(quán)利要求57所述的資源受限裝置,其中所述處理功能包括標(biāo)識一類實例內(nèi)的一或多個實例字段的位置,所述一或多個標(biāo)記包括一或多個索引。
68.如權(quán)利要求57所述的資源受限裝置,其中所述處理功能包括標(biāo)識一類虛擬方法表中的一或多個虛擬方法的位置,所述一或多個標(biāo)記包括一或多個索引。
69.如權(quán)利要求57所述的資源受限裝置,其中所述處理功能包括標(biāo)識一類接口方法表內(nèi)的一或多個接口方法的位置,所述一或多個標(biāo)記包括一或多個索引。
70.如權(quán)利要求57所述的資源受限裝置,其中所述處理功能包括標(biāo)識可被輸出的一或多個靜態(tài)公共項的位置。
71.如權(quán)利要求57所述的資源受限裝置,其中所述資源受限裝置包括一智能卡。
全文摘要
一個系統(tǒng)將下載的結(jié)構(gòu)中性代碼鏈接到資源受限計算機(jī)。該代碼可以分離為一個或多個具有一個或多個可標(biāo)識項的包。該系統(tǒng)將一個或多個可標(biāo)識項映射為相應(yīng)的一個或多個標(biāo)記;相應(yīng)于運行時間模式對標(biāo)記排序;將包下載到資源受限計算機(jī);并利用經(jīng)排序的標(biāo)記將包鏈接到一個可執(zhí)行代碼上。
文檔編號G06F9/445GK1591338SQ200410048468
公開日2005年3月9日 申請日期2000年2月2日 優(yōu)先權(quán)日1999年2月2日
發(fā)明者朱迪思·E·施瓦貝, 喬舒亞·B·舒塞爾 申請人:太陽微電子公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1