專(zhuān)利名稱(chēng):一種java卡對(duì)象管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及智能卡領(lǐng)域,尤其涉及一種JAVA卡對(duì)象管理方法。
背景技術(shù):
智能卡自誕生起,幾十年來(lái),隨著集成電路技術(shù)、計(jì)算機(jī)技術(shù)和信息安全技術(shù)的發(fā)展,從接觸式卡發(fā)展到射頻卡甚至多界面卡,從單一應(yīng)用發(fā)展到多應(yīng)用,種類(lèi)更加豐富,技術(shù)也更趨先進(jìn)。目前這樣,支持多應(yīng)用的智能卡軟件平臺(tái)成為關(guān)鍵,特別是JAVA卡。由于JAVA卡是運(yùn)行時(shí)解析,因此對(duì)象的定位速度會(huì)很大的影響JAVA卡運(yùn)行時(shí)的性能;另外,JAVA卡允許發(fā)卡后動(dòng)態(tài)下載、刪除應(yīng)用,隨著用戶(hù)對(duì)應(yīng)用的更替,JAVA卡的用戶(hù)空間也是很寶貴的資源JAVA卡的對(duì)象管理方式也會(huì)影響到JAVA卡空間的利用效率。在已有的實(shí)現(xiàn)中,JAVA卡的對(duì)象使用2級(jí)表索引的方式,對(duì)象占用空間跟對(duì)象類(lèi)型相關(guān),最少的占用8字節(jié);這種管理方案,不僅對(duì)象解析、訪問(wèn)的效率比較低(需要解析2 3次,才可以訪問(wèn)到對(duì)象),而且對(duì)象表也需占用大量的存儲(chǔ)器空間,而不簡(jiǎn)潔的對(duì)象頭表示方式,也對(duì)存儲(chǔ)器·空間造成了浪費(fèi)。針對(duì)JAVA卡技術(shù)的上述缺陷,本發(fā)明要提供一種高效率的JAVA卡對(duì)象管理方法,方便對(duì)象的定位,節(jié)省堆空間資源,提高JAVA卡的空間使用效率。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種高效率的JAVA卡對(duì)象管理方法。JAVA卡對(duì)象管理方法的目的是加速對(duì)象引用在堆空間中的定位速度,合理利用空間,減少資源浪費(fèi)。為了實(shí)現(xiàn)上述發(fā)明目的,本方法提供的JAVA卡對(duì)象管理方法包括以下步驟JAVA卡對(duì)象的對(duì)象頭與對(duì)象體在堆中分離;任何類(lèi)型的對(duì)象頭都固定占用8字節(jié)長(zhǎng)度,對(duì)象體則根據(jù)JAVA卡對(duì)象的具體內(nèi)容而占用不同的堆存儲(chǔ)空間或者RAM空間。對(duì)象頭分配在存儲(chǔ)器堆空間的一端,對(duì)象體則在存儲(chǔ)器堆空間的另一端分配或在RAM空間進(jìn)行分配。;舉例來(lái)說(shuō),從低地址往高地址分配對(duì)象頭空間、從堆的高地址往低地址分配持久性對(duì)象體空間;或者,反之,從低地址往高地址分配持久性對(duì)象體空間,從堆的高地址往低地址分配對(duì)象頭空間。JAVA卡動(dòng)態(tài)下載的包代碼所使用空間,也與對(duì)象體空間的使用方式相同。預(yù)先分配一些對(duì)象頭空間,并做好初始化;當(dāng)預(yù)留的對(duì)象頭空間已使用時(shí),以存儲(chǔ)器的一個(gè)Page為單位再申請(qǐng)空閑空間,但,需要保證對(duì)象頭空間的連續(xù)性。對(duì)象頭信息為8個(gè)字節(jié),由于所有類(lèi)型對(duì)象都是相同長(zhǎng)度,因此對(duì)象頭以Page為單位進(jìn)行存儲(chǔ)空間申請(qǐng);申請(qǐng)的Page空間,按照每8字節(jié)為一個(gè)對(duì)象頭塊,再進(jìn)行單獨(dú)的空間管理;每個(gè)Page需要留出起始的8個(gè)字節(jié),作為Page管理信息,該8字節(jié)的用途為標(biāo)識(shí)本Page中每個(gè)對(duì)象頭是否被使用的情況。每個(gè)對(duì)象頭塊都對(duì)應(yīng)Page頭標(biāo)識(shí)中的一個(gè)bit位,bit位置I,表明該塊空間已經(jīng)被分配;bit為置O,表明該對(duì)象頭塊為空閑。新對(duì)象被創(chuàng)建時(shí),首先申請(qǐng)對(duì)象頭空間從堆對(duì)象頭使用空間開(kāi)始,順序檢查每個(gè)Page頭的標(biāo)識(shí)字節(jié),確定是否本Page中未被使用的空閑對(duì)象頭塊,如果有,則將空閑的對(duì)象頭分配給新對(duì)象的頭,并重新設(shè)置該對(duì)象頭塊所在Page的標(biāo)識(shí)信息;然后申請(qǐng)對(duì)象體空間如果是持久對(duì)象,從堆對(duì)象體使用空間一端的第一個(gè)空閑塊開(kāi)始,查找并分配適合大小的空閑空間作為對(duì)象體;如果是瞬態(tài)對(duì)象,則從RAM空間分配對(duì)象體。當(dāng)有垃圾對(duì)象被刪除,則直接將該對(duì)象使用的對(duì)象頭塊所對(duì)應(yīng)的page中標(biāo)志信息的bit位置0 ;同時(shí)將對(duì)象體的空間釋放,如果是持久對(duì)象,將釋放的空間加入到堆的空閑塊中統(tǒng)一管理,以供再次使用。每個(gè)對(duì)象的頭信息的最后3個(gè)字節(jié)為一個(gè)地址指針,內(nèi)容為該對(duì)象內(nèi)容在存儲(chǔ)器堆空間的物理地址或者RAM空間地址。對(duì)象引用的表示方式為存儲(chǔ)器堆空間的Page編號(hào)和對(duì)象頭在該P(yáng)age中的塊編號(hào),,其中Page編碼為該P(yáng)age起始地址/(除以)每個(gè)Page的大??;Page中以每8字節(jié)為一個(gè)塊,塊編號(hào)則從I開(kāi)始,順序遞增。舉例來(lái)說(shuō),存儲(chǔ)器中每 個(gè)Page大小為128字節(jié),則該對(duì)象引用(2字節(jié),即16bit)的表示方式為12bit表示page編號(hào),4bit表示page中塊編號(hào),則可以尋址128X2~12 = 2~19,即可以表示512K的空間;同樣類(lèi)推,存儲(chǔ)器中的Page大小為64字節(jié)、256字節(jié)或者512字節(jié)等,分別可以使用3bit、5bit或者6bit表示對(duì)象在Page中的塊編號(hào),而使用13bit、Ilbit或者IObit標(biāo)識(shí)Page編號(hào),都同樣可以尋址512K空間。JAVA卡對(duì)象定位對(duì)象頭的方式為存儲(chǔ)器的Page編號(hào)XPage大小+對(duì)象在該P(yáng)age中的塊編號(hào)X每個(gè)對(duì)象頭塊的大小。這樣,對(duì)象頭地址不需要在索引表存儲(chǔ),因此,不僅不需要額外的索引表存儲(chǔ)對(duì)象頭地址,定位對(duì)象頭信息時(shí),也不需要多次定位、讀取索引表;而定位對(duì)象體,則在對(duì)位對(duì)象頭以后,通過(guò)對(duì)象頭最后3字節(jié)的鏈接指針,來(lái)定位,比對(duì)象頭多一次定位,但仍比二級(jí)表的定位方式要快。本發(fā)明所提供的JAVA卡堆空間對(duì)象管理方法將加速對(duì)象引用在堆空間中的定位速度;節(jié)省堆空間,提高空間使用效率。
圖I持久性對(duì)象在存儲(chǔ)器堆中的結(jié)構(gòu)圖(對(duì)象頭從堆低地址分配空間,對(duì)象體從堆高地址分配空間)圖2持久性對(duì)象在存儲(chǔ)器堆中的結(jié)構(gòu)圖2 (對(duì)象頭從堆高地址分配空間,對(duì)象體從堆低地址分配空間)圖3瞬態(tài)對(duì)象在存儲(chǔ)器堆/RAM中的結(jié)構(gòu)圖
具體實(shí)施例方式JAVA卡對(duì)象的對(duì)象頭與對(duì)象體在堆中分離;任何類(lèi)型的對(duì)象頭都固定占用8字節(jié)長(zhǎng)度,對(duì)象體則根據(jù)對(duì)象的具體內(nèi)容而占用不同的堆存儲(chǔ)空間;對(duì)象體的內(nèi)容為JAVA卡應(yīng)用的數(shù)據(jù),例如,錢(qián)包余額,或者一條記錄,當(dāng)然,也包括對(duì)象的域;由于應(yīng)用的領(lǐng)域不相同,應(yīng)用的數(shù)據(jù)就不同,因此對(duì)象的內(nèi)容也不同。每個(gè)對(duì)象的頭信息的最后3個(gè)字節(jié)為一個(gè)地址指針,內(nèi)容為該對(duì)象內(nèi)容在存儲(chǔ)器堆空間的物理地址或者RAM空間地址。為了對(duì)象頭信息的統(tǒng)一,將持久性類(lèi)數(shù)組對(duì)象、以及簡(jiǎn)單類(lèi)對(duì)象的定義類(lèi)所在包標(biāo)識(shí)和類(lèi)偏移信息,放到對(duì)象體中,占用對(duì)象體的前3字節(jié)。對(duì)象頭分配在存儲(chǔ)器堆空間的一端,對(duì)象體則在存儲(chǔ)器堆空間的另一端分配或在RAM空間進(jìn)行分配。舉例來(lái)說(shuō),從低地址往高地址分配對(duì)象頭空間、從堆的高地址往低地址分配持久性對(duì)象體(及JAVA卡的其他數(shù)據(jù))空間;或者,反之,從低地址往高地址分配持久性對(duì)象體空間,從堆的高地址往低地址分配對(duì)象頭空間。對(duì)象的頭信息始終占用緊湊的、相鄰物理空間,當(dāng)?shù)偷刂窙](méi)有相鄰的空閑塊時(shí),應(yīng)進(jìn)行堆空間緊湊操作。對(duì)象頭信息為8個(gè)字節(jié),由于所有類(lèi)型對(duì)象都是相同長(zhǎng)度,因此對(duì)象頭以Page為 單位進(jìn)行存儲(chǔ)空間申請(qǐng);申請(qǐng)的Page空間,按照每8字節(jié)為一個(gè)對(duì)象頭塊,再進(jìn)行單獨(dú)的空間管理;每個(gè)Page需要留出起始的8個(gè)字節(jié),作為Page管理信息,該8字節(jié)的用途為標(biāo)識(shí)本Page中每個(gè)對(duì)象頭是否被使用的情況。Page中以每8字節(jié)為一個(gè)對(duì)象頭塊,每個(gè)塊都對(duì)應(yīng)Page管理信息的標(biāo)志字節(jié)中的一個(gè)bit位,bit位置‘I’,表明該塊空間已經(jīng)被分配;bit為置‘0’,表明該塊空間為空閑;由于Page管理信息中有8個(gè)字節(jié)被用作了標(biāo)志字節(jié),每個(gè)字節(jié)有8個(gè)bit,所以共可以標(biāo)識(shí)8X8 = 64個(gè)對(duì)象頭塊。先預(yù)先分配一些對(duì)象頭空間,并做好初始化;當(dāng)預(yù)留的對(duì)象頭空間已使用時(shí),以存儲(chǔ)器的一個(gè)Page為單位再申請(qǐng)空閑空間,但,需要保證對(duì)象頭空間的連續(xù)性;預(yù)留空間的方式,可以減少對(duì)象頭空間申請(qǐng)的過(guò)程,加快對(duì)象創(chuàng)建;預(yù)留空間的大小,可以根據(jù)JAVA卡已有應(yīng)用可能創(chuàng)建對(duì)象的多少來(lái)確定。對(duì)象的創(chuàng)建分為對(duì)象頭空間的申請(qǐng)、對(duì)象體空間的申請(qǐng)兩個(gè)步驟1、對(duì)象頭的創(chuàng)建新對(duì)象被創(chuàng)建時(shí),首先從堆對(duì)象頭使用空間開(kāi)始,順序檢查每個(gè)Page頭的標(biāo)識(shí)字節(jié),確定是否本Page中未被使用的塊,如果找到有未使用塊,則將該塊分配給新對(duì)象的頭,并設(shè)置該塊所對(duì)應(yīng)的Page標(biāo)識(shí)信息為‘I’ ;如果預(yù)留的對(duì)象頭空間已全部使用,以存儲(chǔ)器的一個(gè)Page為單位再申請(qǐng)空閑空間,并分配一個(gè)對(duì)象頭塊給對(duì)象頭;2 :對(duì)象體的創(chuàng)建如果是持久性對(duì)象,從堆對(duì)象體使用空間的第一個(gè)空閑塊開(kāi)始,分配空閑空間;如果是瞬態(tài)對(duì)象,則分配RAM空間;持久性對(duì)象,是指卡片在掉電情況下,其內(nèi)容能被完好保存的對(duì)象,該類(lèi)型對(duì)象的對(duì)象體需要保存在非易失性存儲(chǔ)區(qū)中,例如EEPROM ;瞬態(tài)對(duì)象,也就是Clear_0n_Reset對(duì)象、以及Clear_On_Deselect對(duì)象,是在卡片掉電時(shí),其內(nèi)容被丟失的對(duì)象,該類(lèi)型對(duì)象的對(duì)象體需要保存在易失性存儲(chǔ)區(qū)中,例如RAM。對(duì)象刪除后,回收對(duì)象空間時(shí)直接將對(duì)象頭所在Page中,該對(duì)象使用的對(duì)象頭塊所對(duì)應(yīng)的標(biāo)志信息的bit位置0 ;如果刪除對(duì)象為持久性對(duì)象,則將對(duì)象體的空間釋放,加入到堆的空閑塊中;堆中的空閑塊是所有堆未使用空間的集合,堆管理所有空閑塊,在對(duì)象或者包代碼申請(qǐng)空間時(shí),為其分配請(qǐng)求的空間;而在對(duì)象刪除時(shí),將對(duì)象占用空間加入到空閑塊集合中,以供再次使用。對(duì)象引用的表示方式為2字節(jié)的對(duì)象引用=存儲(chǔ)器的Page編號(hào)|對(duì)象在該P(yáng)age中的塊編號(hào),Page編號(hào)占用高N bit,塊編號(hào)占用低M bit,N加M—共為16bit,也就是2字節(jié)。其中Page編碼為該P(yáng)age起始地址/每個(gè)Page的大??;Page中以每8字節(jié)為一個(gè)塊,塊編號(hào)則從I開(kāi)始,順序遞增。舉例來(lái)說(shuō),存儲(chǔ)器中每個(gè)Page大小為128字節(jié),則該對(duì)象引用(2字節(jié),即16bit)的表示方式為12bit表示page編號(hào),4bit表示page中塊編號(hào),則可以尋址128X2~12 = 2~19,即可以表示512K的空間;同樣類(lèi)推,存儲(chǔ)器中的Page大小為64字節(jié)、256字節(jié)或者512字節(jié)等,分別可以使用3bit、5bit或者6bit等表示對(duì)象在Page中的塊編號(hào),而使用13bit、Ilbit或者IObit標(biāo)識(shí)Page編號(hào),都同樣可以尋址512K空間。對(duì)象通過(guò)解析以上的引用,可以直接被定位,,可以直接被定位,對(duì)象頭地址=存儲(chǔ)器的Page編號(hào)XPage大小+對(duì)象在該P(yáng)age中的塊編號(hào)X每個(gè)對(duì)象頭塊的大小。這樣,對(duì)象頭地址不需要在索引表存儲(chǔ),因此,不僅不需要額外的索引表存儲(chǔ)對(duì)象頭地址,定位對(duì)象頭信息時(shí),也不需要多次定位、讀取索弓I表;而定位對(duì)象體,則在對(duì)位對(duì)象頭以后,通過(guò)對(duì)象頭最后3字節(jié)的鏈接指針,來(lái)定位,比對(duì)象頭多一次定位,但仍比二級(jí)表的定位方式要快??傊琂AVA字節(jié)碼解析執(zhí)行時(shí),可以根據(jù)對(duì)象引用,通過(guò)一次解析,可以直接定位對(duì)象的頭信息,包括對(duì)象的類(lèi)型、對(duì)象所在的包標(biāo)識(shí)、對(duì)象域的個(gè)數(shù)等信息;通過(guò)兩次解析 可以訪問(wèn)到對(duì)象的內(nèi)容。對(duì)象頭所在Page塊每個(gè)page開(kāi)始的8個(gè)字節(jié)是塊標(biāo)志字節(jié)。表I對(duì)象頭所在Page塊的格式
PAGE塊格式長(zhǎng)度(Bytes)
對(duì)象頭是否有效的標(biāo)志 8_
第I個(gè)對(duì)象頭塊 8第2個(gè)對(duì)象頭塊__8_
對(duì)象頭的存儲(chǔ)方式 對(duì)象類(lèi)型標(biāo)志I字節(jié),標(biāo)識(shí)對(duì)象類(lèi)型,其定義如下表(未作出說(shuō)明的bit,為保留)表2對(duì)象頭類(lèi)型標(biāo)志的定義說(shuō)明
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 BitlBitO 類(lèi)型說(shuō)明
— — _ — 00 持久性
0I表明為 Clear—On—Reset 瞬態(tài)
1IClear—On—Deselect 瞬態(tài)
0— 0 I — ~通Oilboolean 數(shù)組
1__0__0_______byte 數(shù)組_
10 1short 數(shù)組
I ~ I ' 0 一 — ■一 int 數(shù)組
111reference 數(shù)組對(duì)象包含各種類(lèi)型的瞬態(tài)對(duì)象以及持久性對(duì)象;例如普通類(lèi)型的持久性對(duì)象;byte數(shù)組類(lèi)型的Clear_0n_Reset瞬態(tài)對(duì)象。 普通對(duì)象頭表3普通對(duì)象頭信息格式定義
權(quán)利要求
1.JAVA卡對(duì)象管理方法,其特征在于JAVA卡對(duì)象的對(duì)象頭與對(duì)象體分離存儲(chǔ),JAVA卡對(duì)象以Page為單位申請(qǐng)對(duì)象頭的存儲(chǔ)空間并進(jìn)行Page編號(hào),Page中以每8字節(jié)為一個(gè)塊,塊編號(hào)則從I開(kāi)始,順序遞增;對(duì)象頭占用8字節(jié),最后3字節(jié)為對(duì)象體在存儲(chǔ)器堆空間的物理地址指針或者RAM空間地址指針,對(duì)象體則根據(jù)JAVA卡對(duì)象的具體內(nèi)容而占用不同的存儲(chǔ)器堆空間或RAM空間。
2.如權(quán)利要求I所述的方法,其特征在于每個(gè)Page起始的8個(gè)字節(jié)作為Page管理信息,標(biāo)識(shí)本Page中JAVA卡對(duì)象的對(duì)象頭存儲(chǔ)空間是否被使用的情況。
3.如權(quán)利要求2所述的方法,其特征在于Page中每8字節(jié)作為一個(gè)對(duì)象頭存儲(chǔ)空間,每個(gè)對(duì)象頭都對(duì)應(yīng)Page管理信息中的一個(gè)bit位,bit位置I,表明該對(duì)象頭存儲(chǔ)空間已經(jīng)被分配;bit位置O,表明該對(duì)象頭存儲(chǔ)空間為空閑。
4.如權(quán)利要求I所述的方法,其特征在于對(duì)象頭分配在存儲(chǔ)器堆空間,對(duì)象體則在存儲(chǔ)器堆空間的另一端分配或在RAM空間進(jìn)行分配。
5.如權(quán)利要求I所述的方法,其特征在于預(yù)先分配存儲(chǔ)器堆空間,當(dāng)預(yù)先分配的存儲(chǔ)器堆空間已被使用時(shí),以存儲(chǔ)器堆空間的一個(gè)Page為單位再申請(qǐng)空閑空間,并保證對(duì)象頭存儲(chǔ)空間的連續(xù)性。
6.如權(quán)利要求5所述的方法,其特征在于預(yù)先分配的存儲(chǔ)器堆空間根據(jù)JAVA卡需要?jiǎng)?chuàng)建的JAVA卡對(duì)象的多少來(lái)確定。
7.如權(quán)利要求2或3所述的方法,其特征在于創(chuàng)建對(duì)象頭時(shí),順序檢查Page管理信息,確定本Page中是否有未被使用的對(duì)象頭存儲(chǔ)空間,如果有,則將該對(duì)象頭存儲(chǔ)空間分配給JAVA卡對(duì)象的對(duì)象頭,并設(shè)置該對(duì)象頭存儲(chǔ)空間所對(duì)應(yīng)的Page標(biāo)識(shí)信息為‘I’;如果沒(méi)有,以存儲(chǔ)器堆空間的一個(gè)Page為單位申請(qǐng)空閑空間,并分配一個(gè)對(duì)象頭存儲(chǔ)空間給JAVA卡對(duì)象的對(duì)象頭。
8.如權(quán)利要求2或3所述的方法,其特征在于當(dāng)JAVA卡對(duì)象被刪除后,回收J(rèn)AVA卡對(duì)象的對(duì)象頭空間時(shí),直接將對(duì)象頭對(duì)應(yīng)的bit位置O。
9.根據(jù)權(quán)利要求I所述的方法,其特征在于對(duì)象頭引用的表示方式為存儲(chǔ)器堆空間的Page編號(hào)和對(duì)象頭在該P(yáng)age中的塊編號(hào),其中Page編號(hào)為該P(yáng)age起始地址除以每個(gè)Page的大小。
10.根據(jù)權(quán)利要求I或9所述的方法,其特征在于JAVA卡對(duì)象定位對(duì)象頭的方式為存儲(chǔ)器堆空間的Page編號(hào)XPage大小+對(duì)象頭在該P(yáng)age中的塊編號(hào)X每個(gè)對(duì)象頭所占?jí)K的大小。
全文摘要
本發(fā)明涉及JAVA卡對(duì)象管理方法,包括以下內(nèi)容JAVA卡對(duì)象由對(duì)象頭和對(duì)象體共同組成,對(duì)象頭與對(duì)象體在堆中采用分離地方式存儲(chǔ);所有類(lèi)型的對(duì)象頭都固定占用8字節(jié)長(zhǎng)度,對(duì)象體則根據(jù)對(duì)象的具體內(nèi)容而占用不同大小的存儲(chǔ)空間;根據(jù)JAVA卡的設(shè)計(jì)需求,預(yù)先分配一定的page塊作為對(duì)象頭空間。本發(fā)明所提供的JAVA卡對(duì)象管理方法將提高對(duì)象創(chuàng)建、訪問(wèn)效率,并有利于對(duì)象JAVA智能卡的有限存儲(chǔ)空間的更合理的應(yīng)用。
文檔編號(hào)G06F17/30GK102799660SQ20121023625
公開(kāi)日2012年11月28日 申請(qǐng)日期2012年7月4日 優(yōu)先權(quán)日2012年7月4日
發(fā)明者劉宏梅, 蘆蓉, 崔炳榮 申請(qǐng)人:北京中電華大電子設(shè)計(jì)有限責(zé)任公司