用于使用位圖窗口的持久性存儲器中對象刪除的系統(tǒng)和方法
【專利摘要】一種用于使用代表存儲器塊的位圖窗口在持久性存儲器中進(jìn)行對象刪除的系統(tǒng)和方法。根據(jù)實(shí)施例,該系統(tǒng)一般可以與使用持久性存儲器的諸如智能卡、Java卡和其他資源受限的環(huán)境的計(jì)算環(huán)境(100)一起使用。根據(jù)實(shí)施例,該系統(tǒng)包括處理器或計(jì)算引擎以及用于軟件對象的存儲的持久性存儲器;以及包括一或多個(gè)存儲器位圖窗口(144)的數(shù)據(jù)結(jié)構(gòu)(142),每個(gè)存儲器位圖窗口代表持久性存儲器(140)中可尋址空間的塊(146、148、150);其中該系統(tǒng)在從持久性存儲器刪除不可獲得的對象時(shí)使用一或多個(gè)存儲器位圖窗口。
【專利說明】用于使用位圖窗口的持久性存儲器中對象刪除的系統(tǒng)和方法
[0001]版權(quán)說明
[0002]本專利文件中的一部分公開內(nèi)容包含受版權(quán)保護(hù)的素材。當(dāng)專利文獻(xiàn)或?qū)@_出現(xiàn)在可公開獲得的美國專利商標(biāo)局文件或檔案中時(shí),版權(quán)所有人不反對任何人影印再現(xiàn)專利文獻(xiàn)或?qū)@_,不過保留其它方面的所有版權(quán)。
【技術(shù)領(lǐng)域】
[0003]本發(fā)明的實(shí)施例主要涉及持久性存儲器存儲,且特別地涉及資源受限的環(huán)境和其它計(jì)算環(huán)境,以及用于使用代表存儲器塊的位圖窗口從持久性存儲器刪除不可獲得的對象的系統(tǒng)和方法。
【背景技術(shù)】
[0004]諸如智能卡或類似執(zhí)行環(huán)境或設(shè)備的典型資源受限的環(huán)境可能具有有限的隨機(jī)存取存儲器資源,并且反而使用持久性存儲器作為用于創(chuàng)建和存儲軟件對象的默認(rèn)位置。
[0005]這樣的環(huán)境需要回收由于從定義的根的集合不可獲得而已經(jīng)而變得無用的對象所使用的持久性存儲器。在比如Java SE的其他環(huán)境中可能有用的無用收集算法通常依賴于比如直接移動或標(biāo)記對象的技術(shù)。然而,這些技術(shù)在資源受限的智能卡或類似執(zhí)行環(huán)境中不再同樣有用,因?yàn)榭紤]到在持久性存儲器設(shè)備用盡之前只可以對持久性存儲器設(shè)備做出有限數(shù)量的數(shù)據(jù)寫入,在持久性存儲器中移動或標(biāo)記對象是耗時(shí)的且潛在具有破壞性的操作。
【發(fā)明內(nèi)容】
[0006]此處描述的是一種用于使用代表存儲器塊的位圖窗口在持久性存儲器中進(jìn)行對象刪除的系統(tǒng)和方法。根據(jù)實(shí)施例,該系統(tǒng)可以一般性地與使用持久性存儲器的計(jì)算環(huán)境(諸如智能卡、Java卡和其他資源受限的環(huán)境)一起使用。根據(jù)實(shí)施例,該系統(tǒng)包括處理器或計(jì)算引擎和用于軟件對象的存儲的持久性存儲器;以及可以包括一或多個(gè)存儲器位圖窗口的數(shù)據(jù)結(jié)構(gòu),每個(gè)位圖窗口代表持久性存儲器中的可尋址空間的塊;其中該系統(tǒng)在從持久性存儲器時(shí)刪除不可獲得對象中使用該一或多個(gè)存儲器位圖窗口。
【專利附圖】
【附圖說明】
[0007]圖1根據(jù)實(shí)施例圖解了使用諸如資源受限的環(huán)境或智能卡的持久性存儲器的計(jì)算環(huán)境的示例。
[0008]圖2根據(jù)實(shí)施例圖解了用于在持久性存儲器中對象刪除的代表存儲器塊的位圖窗口的使用。
[0009]圖3根據(jù)實(shí)施例進(jìn)一步圖解了用于在持久性存儲器中對象刪除的位圖窗口的使用。
[0010]圖4根據(jù)實(shí)施例進(jìn)一步圖解了用于在持久性存儲器中對象刪除的位圖窗口的使用。
[0011]圖5是根據(jù)實(shí)施例圖解了用于在持久性存儲器中對象刪除的使用位圖窗口的算法或方法的流程圖。
[0012]圖6是根據(jù)實(shí)施例進(jìn)一步圖解用于在持久性存儲器中對象刪除的使用位圖窗口的算法或方法的流程圖。
[0013]圖7是根據(jù)實(shí)施例進(jìn)一步圖解用于在持久性存儲器中對象刪除的使用位圖窗口的算法或方法的流程圖。
【具體實(shí)施方式】
[0014]如上所述,典型的資源受限的環(huán)境(諸如智能卡或類似執(zhí)行環(huán)境或設(shè)備)可能具有有限的隨機(jī)存取存儲器資源,并且反而使用持久性存儲器作為用于創(chuàng)建和存儲軟件對象的默認(rèn)位置。這樣的環(huán)境需要回收由于從定義的根的集合不可獲得而已經(jīng)而變得無用的對象所使用的持久性存儲器。然而,在其他環(huán)境中可能有用但是依賴于比如直接移動或標(biāo)記對象的技術(shù)的無用收集算法在資源受限的智能卡或類似執(zhí)行環(huán)境中不再同樣有用,因?yàn)榭紤]到在持久性存儲器設(shè)備用盡之前只可以對持久性存儲器設(shè)備做出有限數(shù)量的數(shù)據(jù)寫入,在持久性存儲器中移動或標(biāo)記對象是耗時(shí)的且潛在具有破壞性的操作。
[0015]可以被用于解決這個(gè)問題的方法的種類的一些示例包括:使用蠻力算法檢查每個(gè)對象以確定它是否被從系統(tǒng)中的任何其他對象引用;使用引用計(jì)數(shù)算法,該算法使用引用計(jì)數(shù)更新對象以使得引用計(jì)數(shù)為O指示對象未被另一個(gè)對象引用;或使用代表存儲器中對象的RAM位圖。
[0016]這些方法中的前兩種的問題是它們不考慮對于即使簡單循環(huán)的循環(huán)引用。第一種方法也耗時(shí),因?yàn)樵谧畈畹那闆r下潛在地不得不針對系統(tǒng)中每一個(gè)其他對象檢查系統(tǒng)中的每個(gè)對象以確定從一個(gè)對象到另一個(gè)的引用。第三種方法的問題是該方法依賴于解引用對象,使得該系統(tǒng)使用來自對象表而不是真正地址的對象引用;然而這使得整個(gè)執(zhí)行環(huán)境變緩,因?yàn)楹芏嗖僮鲗⑿枰獙ο蟮刂罚⑶覍⒉坏貌煌瓿蓪υ掃M(jìn)程以從引用獲得地址。
[0017]根據(jù)實(shí)施例,此處描述的是用于使用代表存儲器塊的位圖窗口在持久性存儲器中進(jìn)行對象刪除的系統(tǒng)和方法。根據(jù)實(shí)施例,該系統(tǒng)可以一般性地與使用持久性存儲器的計(jì)算環(huán)境(諸如智能卡、Java卡和其他資源受限的環(huán)境)一起使用。根據(jù)實(shí)施例,該系統(tǒng)包括處理器或計(jì)算引擎和用于軟件對象的存儲的持久性存儲器;以及可以包括一或多個(gè)存儲器位圖窗口的數(shù)據(jù)結(jié)構(gòu),每個(gè)位圖窗口代表持久性存儲器中的可尋址空間的塊;其中該系統(tǒng)在從持久性存儲器中刪除不可獲得對象時(shí)使用該一或多個(gè)存儲器位圖窗口。
[0018]根據(jù)各個(gè)實(shí)施例,此處描述的系統(tǒng)和方法的一些優(yōu)點(diǎn)包括能夠提供解決循環(huán)引用問題的標(biāo)記-清理無用收集技術(shù)的快速版本;不需要解引用對象;同樣,直到存儲器的真正回收才需要向持久性存儲器寫入;以及該方法可擴(kuò)展以使得整體目標(biāo)存儲器面積的變大不增大資源需求。
[0019]圖1根據(jù)實(shí)施例圖解了諸如資源受限的環(huán)境或智能卡的使用持久性存儲器的計(jì)算環(huán)境的示例。
[0020]如圖1中所示,根據(jù)實(shí)施例,諸如資源受限的環(huán)境、智能卡或其他環(huán)境的計(jì)算環(huán)境或設(shè)備100可以被認(rèn)為是小型計(jì)算設(shè)備,該小型計(jì)算設(shè)備包括可以包括用于執(zhí)行計(jì)算操作的電路的處理器或計(jì)算引擎126 ;以及諸如隨機(jī)存取存儲器(RAM) 120、電可擦可編程只讀存儲器(EEPROM) 122和/或只讀存儲器(ROM) 124的一或多個(gè)存儲器。
[0021]根據(jù)實(shí)施例,該RAM可以包括易失隨機(jī)存取存儲器,該EEPROM可以包括可寫非易失存儲器,以及該ROM可以包括只讀存儲器。該RAM可以被用于存儲諸如系統(tǒng)堆棧121的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)。該ROM可以包括諸如Java虛擬機(jī)的虛擬機(jī)108,該虛擬機(jī)允許以諸如Java的與平臺無關(guān)的編程語言所寫的應(yīng)用由智能卡執(zhí)行;并且也可以包括為訪問智能卡的客戶提供服務(wù)的一或多個(gè)應(yīng)用104、105。根據(jù)實(shí)施例,應(yīng)用106也可以位于EEPROM中或在ROM和/或EEPROM中。
[0022]根據(jù)實(shí)施例,該系統(tǒng)可以包括卡管理器102或類似邏輯,該卡管理器包括用于管理在計(jì)算環(huán)境或設(shè)備上應(yīng)用的執(zhí)行(包括例如允許客戶和應(yīng)用之間的通信)以及從存儲器刪除對象的代碼。例如,如圖1中所示,在設(shè)備的操作過程中,EEPROM可以包括多個(gè)對象112、113、114,這些對象由應(yīng)用104、105訪問(更具體地,應(yīng)用104訪問對象112,應(yīng)用105訪問對象113和114,應(yīng)用106訪問對象114);而已經(jīng)變得不相連的其他對象115、116不再被任何應(yīng)用引用。一般希望刪除這些未引用的對象以釋放存儲器空間。
[0023]通過對可以使用此處描述的系統(tǒng)和方法的一種環(huán)境的說明提供圖1中圖解的環(huán)境。根據(jù)各個(gè)實(shí)施例,本發(fā)明不限于資源受限的環(huán)境或智能卡或以上描述的特定的環(huán)境或配置,并且通??梢耘c可在可寫持久性或非易失存儲器中存儲對象的其他類型的計(jì)算環(huán)境、設(shè)備或系統(tǒng)一起使用。
[0024]根據(jù)實(shí)施例,提供用于代表存儲器的塊的位圖窗口的使用的系統(tǒng)和方法。該技術(shù)使用可以在非常有限的資源下工作并同時(shí)映射大量可尋址空間的算法或方法。該技術(shù)也可擴(kuò)展以使得針對增加的持久性存儲器尺寸,即使整體RAM尺寸維持相對不變,該算法或方法將仍然工作。附加地,該算法或方法不降低整體系統(tǒng)性能,而在蠻力、引用計(jì)數(shù)和解引用技術(shù)情況下,系統(tǒng)性能會降低。
[0025]圖2根據(jù)實(shí)施例圖解了用于在持久性存儲器中進(jìn)行對象刪除的代表存儲器塊的位圖窗口的使用。
[0026]如圖2所示,根據(jù)實(shí)施例,系統(tǒng)可以包括數(shù)據(jù)結(jié)構(gòu)142,該數(shù)據(jù)結(jié)構(gòu)可以包括一或多個(gè)存儲器位圖窗口 144(156、158、160),這些存儲器位圖窗口代表用于對象的存儲的持久性存儲器140中的可尋址空間的塊146、148、150。該數(shù)據(jù)結(jié)構(gòu)可以進(jìn)一步包括潛在的無用列表162,該列表列出在已經(jīng)處理過的窗口中未被引用的對象;動態(tài)根列表164,列出了從之前窗口引用的但是不在之前窗口中的可尋址空間中的、成為下一窗口的根的對象;最大遞歸深度166,該深度是限制用于標(biāo)記階段的遞歸深度的可配置值;以及延遲的對象列表168,一旦達(dá)到所配置的遞歸深度,該延遲的對象列表包括還未被處理的子對象。
[0027]圖3和圖4進(jìn)一步根據(jù)實(shí)施例圖解了在用于持久性存儲器中進(jìn)行對象刪除的位圖窗口的使用。
[0028]根據(jù)實(shí)施例,為了避免在標(biāo)記過程中對EEPROM的不必要寫入,系統(tǒng)可以在RAM中維持位圖。在例如典型的資源受限的環(huán)境的某些環(huán)境中,RAM是稀有資源;典型的量可能是2k,其為位圖存儲提供很少空間。舉例來說,512字節(jié)的位圖含有4k比特,且每一比特可以代表4個(gè)字節(jié),所以這個(gè)尺寸的位圖可以被用于代表16k的存儲器。
[0029]根據(jù)實(shí)施例,在對象刪除過程期間,系統(tǒng)可以執(zhí)行“標(biāo)記”在存儲器中所有可獲得的對象的標(biāo)記過程。這可以通過跟隨從“根”(諸如從小程序表和靜態(tài)變量)的引用鏈來完成,以找到可獲得對象。例如,小程序?qū)ο罂梢灾赶蛄硪粋€(gè)對象,該對象又指向其他對象,這些其他對象的每一個(gè)也指向其他對象。類似的,靜態(tài)變量可以指向?qū)ο?,這些對象又指向其他對象。
[0030]根據(jù)實(shí)施例,在標(biāo)記階段期間,從窗口的根對象開始,它的子對象被標(biāo)記。如果子對象位于窗口外部并且在下一窗口中,那么該對象可作為用于下一窗口的根被放到動態(tài)根列表中。如果子對象在該窗口內(nèi),那么它可以被標(biāo)記,且該系統(tǒng)可以在該對象的子對象上遞歸。如果子對象在之前窗口中,那么該系統(tǒng)檢查潛在的無用列表并在該對象上遞歸,并隨后將它從潛在的無用列表移除,因?yàn)樗蓮脑摯翱诒粚ぶ?。在針對窗口的?biāo)記階段之后,系統(tǒng)尋找未被標(biāo)記的對象,并將它們放在潛在的無用列表中。這些對象可能還不會真正被認(rèn)為是無用的,因?yàn)樗鼈兛蓮南乱淮翱诒粚ぶ?。該系統(tǒng)隨后處理之后的窗口。最終,在完成這些窗口之后,潛在的無用列表將包含未被引用且可被認(rèn)為無用的對象。
[0031]如圖3中所示,根據(jù)實(shí)施例,存儲器空間被劃分成窗口。針對窗口初始化位圖,其中一比特代表存儲器中一個(gè)地址。例如,如果以4字節(jié)對齊執(zhí)行存儲器管理,那么I比特可以代表在4字節(jié)存儲器單元中的第一字節(jié)。隨后,該位圖窗口被處理。對于每個(gè)窗口,根對象被標(biāo)記,包括如小程序表169所指示的在當(dāng)前窗口內(nèi)標(biāo)記小程序?qū)ο?70 ;標(biāo)記從靜態(tài)字段176引用的在窗口中的對象174 ;并標(biāo)記來自動態(tài)根表的在窗口中的對象178。
[0032]根據(jù)實(shí)施例,子對象被隨后標(biāo)記,包括如果在當(dāng)前窗口內(nèi)發(fā)現(xiàn)子對象171、172,通過標(biāo)記184在位圖中對應(yīng)比特標(biāo)記該對象。如果在潛在無用列表中當(dāng)前窗口外發(fā)現(xiàn)子對象180,那么該對象和它的子對象被在當(dāng)前窗口和潛在無用列表中遞歸地標(biāo)記。如果在當(dāng)前窗口外而不是潛在無用列表中發(fā)現(xiàn)子對象,那么,如果該對象在存儲器的已經(jīng)處理過的區(qū)域中,則它已經(jīng)被標(biāo)記為可獲得,且因此它可以被忽略。然而,如果該子對象位于存儲器的仍然需要被處理的區(qū)域中,那么它被放到動態(tài)根列表中。
[0033]根據(jù)實(shí)施例,在標(biāo)記子對象時(shí),如果達(dá)到最大遞歸深度,那么在該層次中的下一對象被放在延遲的對象列表上,并且將在當(dāng)前層次的處理的結(jié)尾處被處理。如果該延遲的對象列表為滿,且已經(jīng)達(dá)到最大遞歸深度,那么在當(dāng)前窗口中重啟標(biāo)記過程,而不重新設(shè)置位圖,從而增加在第二和隨后循環(huán)中的根的數(shù)量。一旦在窗口內(nèi)完成標(biāo)記階段,在窗口內(nèi)的任何未被弓I用的對象都被放在潛在無用列表上。
[0034]如圖4中所示,過程繼續(xù)到下一窗口和它的根和子對象185、186、187、188。當(dāng)所有的窗口已經(jīng)被處理時(shí),潛在無用列表將僅包括未被引用且因此無用的對象189。根據(jù)實(shí)施例,這些對象可以被刪除以回收已使用的存儲器。
[0035]圖5是根據(jù)實(shí)施例示出用于在持久性存儲器中進(jìn)行對象刪除的使用位圖窗口的算法或方法190的流程圖。
[0036]如圖5所示,在步驟192處,存儲空間被劃分成窗口。
[0037]在步驟194處,針對窗口初始化位圖,其中一比特代表存儲器中的一個(gè)地址。
[0038]在步驟196、198、202處,位圖窗口被處理。根據(jù)實(shí)施例,針對每個(gè)窗口,根對象被標(biāo)記,包括標(biāo)記在當(dāng)前窗口內(nèi)的小程序?qū)ο螅瑯?biāo)記從靜態(tài)字段引用的在窗口中的對象,以及標(biāo)記來自動態(tài)根表的在窗口中的對象。之后,子對象按照以下進(jìn)一步詳細(xì)描述的標(biāo)準(zhǔn)被標(biāo)記,且位圖被更新。當(dāng)前窗口中的任何未被引用的對象被放到潛在無用列表上。
[0039]在步驟204處,當(dāng)所有的窗口都已經(jīng)被處理時(shí),潛在無用列表將只包括未被引用且因此無用的對象。根據(jù)實(shí)施例,這些對象可以被刪除以回收已被使用的存儲器。
[0040]圖6是根據(jù)實(shí)施例進(jìn)一步圖解用于在持久性存儲器中進(jìn)行對象刪除的使用位圖窗口的算法或方法210的流程圖。特別地,圖6根據(jù)實(shí)施例進(jìn)一步圖解了根和子對象的標(biāo)記可以如何被執(zhí)行。
[0041]如圖6中所示,在步驟212處,針對每個(gè)窗口,根對象被標(biāo)記,包括標(biāo)記在當(dāng)前窗口內(nèi)小程序?qū)ο?、?biāo)記從靜態(tài)字段引用的在窗口中的對象以及標(biāo)記來自動態(tài)根字段的在窗口中的對象。
[0042]在步驟214處,子對象被標(biāo)記,包括如果在當(dāng)前窗口內(nèi)發(fā)現(xiàn)子對象,通過標(biāo)記在位圖中的對應(yīng)比特標(biāo)記該對象。如果在當(dāng)前窗口外在潛在無用列表中發(fā)現(xiàn)子對象,那么該對象和它的子對象在當(dāng)前窗口和潛在列表中被遞歸地標(biāo)記。如果子對象被發(fā)現(xiàn)在當(dāng)前窗口外且不在潛在無用列表中,那么,如果該對象在存儲器的已經(jīng)處理過的區(qū)域中,它已經(jīng)被標(biāo)記為可獲得的,且因此可以被忽略。然而,如果該子對象位于存儲器的仍然需要被處理的區(qū)域中,那么它被放到動態(tài)根列表中。
[0043]在步驟216處,當(dāng)標(biāo)記子對象時(shí),如果達(dá)到最大遞歸深度,那么在層次中的下一對象被放在延遲的對象列表上,并且將在當(dāng)前層次的處理的結(jié)尾處被處理。
[0044]在步驟220處,如果該延遲的對象列表為滿,且已經(jīng)達(dá)到最大遞歸深度,那么在當(dāng)前窗口中重啟標(biāo)記過程,而不重新設(shè)置位圖,從而增加在第二和隨后循環(huán)中的根的數(shù)量。
[0045]在步驟222處,一旦在窗口中完成標(biāo)記階段,在窗口內(nèi)的任何未被引用的對象都被放在潛在無用列表上。如上所描述的,當(dāng)所有的窗口都已經(jīng)被處理時(shí),潛在的無用列表將僅包括未被引用且因此無用的對象。根據(jù)實(shí)施例,這些對象可以被刪除以回收被使用的存儲器。
[0046]圖7是根據(jù)實(shí)施例進(jìn)一步圖解用于在持久性存儲器中刪除對象的使用位圖窗口的算法或方法230的流程圖。特別地,圖7根據(jù)實(shí)施例圖解了之前在圖5和6中描述過的每個(gè)步驟的組合。
[0047]總體而言,本發(fā)明涉及在一或多個(gè)微處理器上運(yùn)行的、用于使用代表存儲器塊的位圖窗口在持久性存儲器中進(jìn)行對象刪除的系統(tǒng),包括:
[0048]用于在包括處理器或計(jì)算引擎和用于軟件對象的存儲的持久性存儲器的計(jì)算環(huán)境或設(shè)備(諸如資源受限的環(huán)境、智能卡或其他環(huán)境)處提供數(shù)據(jù)結(jié)構(gòu)的裝置,該數(shù)據(jù)結(jié)構(gòu)可以包括一或多個(gè)位圖窗口,每個(gè)位圖窗口代表持久性存儲器中可尋址空間的塊。
[0049]用于在從持久性存儲器中刪除不可獲得的對象時(shí)使用一或多個(gè)存儲器位圖窗口的裝置。
[0050]所述系統(tǒng)進(jìn)一步包括用于在數(shù)據(jù)結(jié)構(gòu)內(nèi)提供以下一或多個(gè)的裝置:
[0051]潛在無用列表;
[0052]動態(tài)根列表;
[0053]最大遞歸深度;以及
[0054]延遲的對象列表。
[0055]所述系統(tǒng)進(jìn)一步包括:
[0056]該潛在無用列表包括已經(jīng)被處理的窗口中的未被引用的對象;
[0057]該動態(tài)根列表包括從之前窗口引用的但不在之前窗口中的可尋址空間中的對象,該對象成為下一窗口的根;
[0058]該最大遞歸深度是限制用于標(biāo)記階段的遞歸深度的可配置值;以及
[0059]一旦達(dá)到配置的遞歸深度,該延遲對象列表包括還未被處理的子對象。
[0060]所述系統(tǒng)進(jìn)一步包括:
[0061]用于將用于對象的存儲的持久性存儲器空間劃分為窗口的裝置;
[0062]用于針對窗口初始化位圖的裝置,此處一比特代表存儲器中一個(gè)地址;
[0063]針對每個(gè)窗口,標(biāo)記根,并遞歸地標(biāo)記子對象;
[0064]當(dāng)在窗口中完成標(biāo)記階段時(shí),用于將在該窗口內(nèi)任意未被引用的對象放在潛在無用列表上的裝置;以及
[0065]用于處理每個(gè)窗口以使得潛在無用列表最終包括未被引用且可被認(rèn)為無用的那些對象的裝置。
[0066]可以使用包括一或多個(gè)處理器、存儲器和/或根據(jù)本公開的啟示編程的計(jì)算機(jī)可讀存儲介質(zhì)的一或多個(gè)傳統(tǒng)通用或?qū)S脭?shù)字計(jì)算機(jī)、計(jì)算設(shè)備、機(jī)器或微處理器方便地實(shí)現(xiàn)本發(fā)明。熟練的編程人員可以基于本公開的啟示容易地準(zhǔn)備合適的軟件代碼,如軟件領(lǐng)域的技術(shù)人員清楚的那樣。
[0067]在一些實(shí)施例中,本發(fā)明包括計(jì)算程序產(chǎn)品,該產(chǎn)品是其上/其中存儲有可以被用來編程計(jì)算機(jī)以執(zhí)行本發(fā)明的任意過程的指令的非易失存儲介質(zhì)或計(jì)算機(jī)可讀介質(zhì)。該存儲介質(zhì)可以包括但不限于任何種類的盤,包括軟盤、光盤、DVD、CD-ROM、微驅(qū)動和磁光盤、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、閃存設(shè)備、磁或光卡、納米系統(tǒng)(包括分子存儲器IC)或適合存儲指令和/或數(shù)據(jù)的任何種類的介質(zhì)或設(shè)備。
[0068]本發(fā)明的以上描述僅僅被提供用于圖解和描述的目的。它并不意圖窮盡或限制本發(fā)明到所公開的具體形式。對于本領(lǐng)域技術(shù)人員而言許多修改和改變將是明顯的。實(shí)施例被選擇和描述從而最好地解釋本發(fā)明的原則和實(shí)際的應(yīng)用,從而允許本領(lǐng)域技術(shù)人員理解針對各個(gè)實(shí)施例的本發(fā)明以及具有適于特定用途的各種修改的本發(fā)明。意圖由所附權(quán)利要求和它們的等價(jià)限定本發(fā)明的范圍。
【權(quán)利要求】
1.一種用于使用代表存儲器塊的位圖窗口在持久性存儲器中進(jìn)行對象刪除的系統(tǒng),包括: 計(jì)算環(huán)境或設(shè)備,比如資源受限的環(huán)境、智能卡或其他環(huán)境,包括處理器或計(jì)算引擎和用于軟件對象的存儲的持久性存儲器; 數(shù)據(jù)結(jié)構(gòu),能夠包括一或多個(gè)存儲器位圖窗口,每個(gè)存儲器位圖窗口代表持久性存儲器中可尋址空間的塊;以及 其中所述系統(tǒng)在從持久性存儲器刪除不可獲得的對象時(shí)使用所述一或多個(gè)存儲器位圖窗口。
2.如權(quán)利要求1所述的系統(tǒng),其中所述數(shù)據(jù)結(jié)構(gòu)包括以下各項(xiàng)中的一或多個(gè): 潛在的無用列表; 動態(tài)根列表; 最大遞歸深度;以及 延遲的對象列表。
3.如權(quán)利要求2所述的系統(tǒng),其中 所述潛在的無用列表包括在已經(jīng)被處理的窗口中未被引用的對象; 所述動態(tài)根列表包括從之前窗口引用的但不在之前窗口中的可尋址空間中的對象,所述對象成為下一窗口的根; 所述最大遞歸深度是限制用于標(biāo)記階段的遞歸深度的可配置值;以及 一旦達(dá)到被配置的遞歸深度,所述延遲的對象列表包括還未被處理的子對象。
4.如權(quán)利要求3所述的系統(tǒng),其中所述系統(tǒng)執(zhí)行包括以下步驟的方法 將用于對象的存儲的持久性存儲器空間劃分為窗口 ; 針對窗口初始化位圖,其中一比特代表存儲器中的一個(gè)地址; 針對每個(gè)窗口,標(biāo)記根并遞歸地標(biāo)記子對象; 當(dāng)所述標(biāo)記階段在窗口中完成時(shí),將此窗口內(nèi)任何未被引用的對象放在潛在的無用列表上;以及 處理每個(gè)窗口以使得所述潛在的無用列表最終包括未被引用且能夠被認(rèn)為無用的那些對象。
5.一種用于使用代表存儲器塊的位圖窗口在持久性存儲器中進(jìn)行對象刪除的方法,包括以下步驟: 在包括處理器或計(jì)算引擎和用于軟件對象的存儲的持久性存儲器的諸如資源受限的環(huán)境、智能卡或其他環(huán)境的計(jì)算環(huán)境或設(shè)備處提供數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)能夠包括一或多個(gè)存儲器位圖窗口,每個(gè)存儲器位圖窗口代表持久性存儲器中可尋址空間的塊;以及在從持久性存儲器刪除不可獲得的對象時(shí)使用所述一或多個(gè)存儲器位圖窗口。
6.如權(quán)利要求5所述的方法,進(jìn)一步包括在所述數(shù)據(jù)結(jié)構(gòu)內(nèi)提供以下各項(xiàng)中的一或多個(gè): 潛在的無用列表; 動態(tài)根列表; 最大遞歸深度;以及 延遲的對象列表。
7.如權(quán)利要求6所述的方法,其中 所述潛在的無用列表包括在已經(jīng)被處理的窗口中未被引用的對象; 所述動態(tài)根列表包括從之前窗口引用的但不在之前窗口中的可尋址空間中的對象,所述對象成為下一窗口的根; 所述最大遞歸深度是限制用于標(biāo)記階段的遞歸深度的可配置值;以及 一旦達(dá)到被配置的遞歸深度,所述延遲的對象列表包括還未被處理的子對象。
8.如權(quán)利要求7所述的方法,進(jìn)一步包括: 將用于對象的存儲的持久性存儲器空間劃分為窗口 ; 針對窗口初始化位圖,其中一比特代表存儲器中的一個(gè)地址; 針對每個(gè)窗口,標(biāo)記根并遞歸地標(biāo)記子對象; 當(dāng)所述標(biāo)記階段在窗口中完成時(shí),將此窗口內(nèi)任何未被引用的對象放在潛在的無用列表上;以及 處理每個(gè)窗口以使得所述潛在的無用列表最終包括未被引用且能夠被認(rèn)為無用的那些對象。
9.一種包括程序代碼指令的計(jì)算機(jī)程序,所述程序代碼指令當(dāng)由計(jì)算機(jī)系統(tǒng)執(zhí)行時(shí)引起該計(jì)算機(jī)系統(tǒng)執(zhí)行任意一項(xiàng)上述權(quán)利要求所述的方法。
10.一種包括存儲于機(jī)器可讀介質(zhì)上的如權(quán)利要求9所述的計(jì)算機(jī)程序的計(jì)算機(jī)程序女口廣叩ο
11.一種非暫時(shí)性計(jì)算機(jī)可讀介質(zhì),包括存儲于其上的指令,當(dāng)所述指令被計(jì)算環(huán)境或設(shè)備讀取并執(zhí)行時(shí)引起計(jì)算環(huán)境或設(shè)備執(zhí)行以下步驟,包括: 在包括處理器或計(jì)算引擎和用于軟件對象的存儲的持久性存儲器的諸如資源受限的環(huán)境、智能卡或其他環(huán)境的計(jì)算環(huán)境或設(shè)備處提供數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)能夠包括一或多個(gè)存儲器位圖窗口,每個(gè)存儲器位圖窗口代表持久性存儲器中可尋址空間的塊;以及在從持久性存儲器刪除不可獲得的對象時(shí)使用所述一或多個(gè)存儲器位圖窗口。
12.如權(quán)利要求11所述的非暫時(shí)性計(jì)算機(jī)可讀介質(zhì),進(jìn)一步包括在所述數(shù)據(jù)結(jié)構(gòu)內(nèi)提供以下各項(xiàng)中的一或多個(gè): 潛在的無用列表; 動態(tài)根列表; 最大遞歸深度;以及 延遲的對象列表。
13.如權(quán)利要求12所述的非暫時(shí)性計(jì)算機(jī)可讀介質(zhì),其中 所述潛在的無用列表包括在已經(jīng)被處理的窗口中未被引用的對象; 所述動態(tài)根列表包括從之前窗口引用的但不在之前窗口中的可尋址空間中的對象,所述對象成為下一窗口的根; 所述最大遞歸深度是限制用于標(biāo)記階段的遞歸深度的可配置值;以及 一旦達(dá)到被配置的遞歸深度,所述延遲的對象列表包括還未被處理的子對象。
14.如權(quán)利要求13所述的非暫時(shí)性計(jì)算機(jī)可讀介質(zhì),進(jìn)一步包括: 將用于對象的存儲的持久性存儲器空間劃分為窗口 ; 針對窗口初始化位圖,其中一比特代表存儲器中的一個(gè)地址; 針對每個(gè)窗口,標(biāo)記根并遞歸地標(biāo)記子對象; 當(dāng)所述標(biāo)記階段在窗口中完成時(shí),將此窗口內(nèi)任何未被引用的對象放在潛在的無用列表上;以及 處理每個(gè)窗口以使得所述潛在的無用列表最終包括未被引用且能夠被認(rèn)為無用的那些對象。
【文檔編號】G06F12/02GK104350478SQ201380030019
【公開日】2015年2月11日 申請日期:2013年7月30日 優(yōu)先權(quán)日:2012年7月30日
【發(fā)明者】S·阿哈瑪?shù)? 申請人:甲骨文國際公司