專(zhuān)利名稱(chēng):Java卡系統(tǒng)垃圾回收方法
技術(shù)領(lǐng)域:
本發(fā)明涉及智能卡領(lǐng)域,尤其涉及一種Java卡系統(tǒng)垃圾回收方法。
背景技術(shù):
智能卡已經(jīng)被廣泛應(yīng)用在手機(jī)、音樂(lè)播放器、數(shù)字電視等各 類(lèi)產(chǎn)品中,智能卡可以實(shí)現(xiàn)身份識(shí)別、數(shù)據(jù)的存儲(chǔ)、信息處理等 多種功能。以廣泛應(yīng)用于手機(jī)中的SIM卡(Subscriber Identity Model,客戶(hù)識(shí)別模塊)為例,SIM卡即是一種具有用戶(hù)識(shí)別功 能和數(shù)據(jù)存儲(chǔ)、處理功能的智能卡,它是移動(dòng)運(yùn)營(yíng)商、增值業(yè)務(wù) 提供商和用戶(hù)之間的々某介,被廣泛地應(yīng)用于移動(dòng)通訊領(lǐng)域內(nèi)。隨著第三代移動(dòng)通信系統(tǒng)(簡(jiǎn)稱(chēng)3G)的到來(lái),3G運(yùn)營(yíng)商將 利用3G網(wǎng)絡(luò)的帶寬優(yōu)勢(shì)其客戶(hù)提供諸如音樂(lè)下載、視頻服務(wù)、 無(wú)線(xiàn)寬帶接入等新業(yè)務(wù),由于傳統(tǒng)的普通SIM卡不具有應(yīng)用程序 (Applet)下載的功能,因此限制了移動(dòng)運(yùn)營(yíng)商和增值業(yè)務(wù)提供 商的業(yè)務(wù)開(kāi)展,而新興的Java卡技術(shù)的出現(xiàn)則解決了這個(gè)難題。 Java卡技術(shù)是一項(xiàng)新興的智能卡技術(shù),是一個(gè)開(kāi)放的多應(yīng)用平 臺(tái),通過(guò)Java卡可以實(shí)現(xiàn)下載各種應(yīng)用程序,但是,由于Java 卡嵌入式系統(tǒng)的存儲(chǔ)空間有限,用戶(hù)只能通過(guò)更新Java卡上的各 種應(yīng)用程序來(lái)解決越來(lái)越多的使用需求,隨著用戶(hù)對(duì)程序的選擇 和更新,將產(chǎn)生許多系統(tǒng)垃圾占用存儲(chǔ)空間,使得本來(lái)就很有限 的資源被這些系統(tǒng)垃圾更大程度的浪費(fèi)了。因此,怎樣更有效率 的使用Java卡的有限空間是一個(gè)需要迫切解決的問(wèn)題。針對(duì)現(xiàn)有技術(shù)的上述缺陷,本發(fā)明就是要提供一種高效率的 Java卡系統(tǒng)垃圾的回收方法,實(shí)現(xiàn)對(duì)系統(tǒng)垃圾的清理,將系統(tǒng)垃 圾所占用的空間進(jìn)行回收,為應(yīng)用程序的下載提供充足的空間。發(fā)明內(nèi)容本發(fā)明的目的是提供一種高效率的Java卡系統(tǒng)垃圾的回收方法。為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供的Java卡系統(tǒng)垃圾的回收 方法包括以下步驟步驟一,由Java卡系統(tǒng)調(diào)用系統(tǒng)垃圾回收實(shí)現(xiàn)函數(shù);步驟二,在鋪墊區(qū)中對(duì)系統(tǒng)垃圾回收實(shí)現(xiàn)函數(shù)進(jìn)行初始化操作;步驟三,由跟蹤收集器進(jìn)行對(duì)象遍歷,并在位圖區(qū)中進(jìn)行標(biāo)記;步驟四,清除在位圖區(qū)中仍為初始化值的位所對(duì)應(yīng)的對(duì)象。本發(fā)明所3是供的Java卡系統(tǒng)垃圾回收方法將Java卡系統(tǒng)中 垃圾占用的空間(即對(duì)象遍歷過(guò)程中無(wú)法到達(dá)的對(duì)象)進(jìn)行高效 率的整理,使得Java智能卡的有限存儲(chǔ)空間得到了更合理的應(yīng) 用,為應(yīng)用程序的下載提供充足的空間。為了l吏得本發(fā)明Java卡系統(tǒng)垃圾回收方法更加優(yōu)化,還可 以在執(zhí)行完步驟四之后由堆碎片管理器進(jìn)行堆碎片整理。詳細(xì)的內(nèi)容將在具體實(shí)施例中作更清楚的介紹。
圖1是本發(fā)明所涉及的Java棧的一種空間管理方式;圖2是本發(fā)明所述Java卡系統(tǒng)垃圾回收方法的基本流程圖;以下結(jié)合實(shí)施例及其附圖作進(jìn) 一 步的詳細(xì)說(shuō)明。
具體實(shí)施方式
為清楚描述本發(fā)明所述的Java卡系統(tǒng)垃圾回收方法,首先 引入跟蹤收集器這個(gè)硬件結(jié)構(gòu)。本發(fā)明所涉及的Java卡包括跟蹤收集器,其完成對(duì)象遍歷 和對(duì)象清除兩個(gè)過(guò)程。在對(duì)象遍歷階段,跟蹤收集器從根集開(kāi)始 掃描,沿著整個(gè)對(duì)象圖上的每條鏈接,遞歸確定可到達(dá)(reachable)的對(duì)象,在跟蹤過(guò)程中遇到的可到達(dá)的對(duì)象使用一 個(gè)獨(dú)立的位圖來(lái)設(shè)置標(biāo)記,如果某對(duì)象不能從這些根對(duì)象的一個(gè)(至少一個(gè))到達(dá),則將它作為垃圾收集。以下將詳細(xì)描述對(duì)象 遍歷的原理和過(guò)禾呈。在上述對(duì)象遍歷過(guò)程中使用了 Java棧,參見(jiàn)圖1中揭示了本 發(fā)明所涉及的Java棧的一種空間管理方式Java棧的最底層為已 用空間1,已用空間l的上層為可用空間,4巴Java??捎每臻g的 基地址作為對(duì)象遍歷區(qū)的基地址,并預(yù)留 一段空間作為鋪墊區(qū) 2,鋪墊區(qū)2在執(zhí)行垃圾回收實(shí)現(xiàn)函數(shù)的初始化時(shí)使用;位圖區(qū)3 位于鋪墊區(qū)2的上面,位圖區(qū)3的基地址是對(duì)象遍歷區(qū)的基地址 加上鋪墊區(qū)大小偏移,位圖區(qū)3在垃圾回收實(shí)現(xiàn)函數(shù)進(jìn)行初始化 時(shí)開(kāi)辟,并且在初始化過(guò)程中,將位圖區(qū)3所有的位的值置為 "0",程序創(chuàng)建的所有對(duì)象都在位圖區(qū)3中對(duì)應(yīng)l位(Bit),每8 位組合為一組。在對(duì)象遍歷過(guò)程中,從根集開(kāi)始掃描,每到達(dá)一 個(gè)對(duì)象就將它在位圖中對(duì)應(yīng)的位(bit)置為"1"。即, 一旦對(duì) 應(yīng)的位被置"1",則表示其屬于可以到達(dá)的對(duì)象。對(duì)象遍歷采用遞歸方式,在圖l所示的實(shí)施例中,遞歸的深 度為4級(jí)(A、 B、 C、 D),當(dāng)遞歸超過(guò)4級(jí)(例如E)但還有 可以到達(dá)的對(duì)象存在,則將后續(xù)的對(duì)象添加到對(duì)象緩沖區(qū)4,對(duì) 象緩沖區(qū)4的基地址為位圖區(qū)3的結(jié)束地址,對(duì)象緩沖區(qū)4的大 小為棧指針的偏移減去位圖區(qū)3結(jié)束地址的偏移,當(dāng)對(duì)象遞歸處理完成并返回后,將調(diào)用存放在對(duì)象緩沖區(qū)4的對(duì)象并開(kāi)始下一 次遞歸及緩存。在完成對(duì)象遍歷階段之后,進(jìn)入對(duì)象清除階段,在對(duì)象清除 階段,跟蹤收集器將那些從根集不可到達(dá)的對(duì)象(即其在位圖區(qū) 3中對(duì)應(yīng)的位仍為"0")作為垃圾回收的對(duì)象進(jìn)行刪除。即,根 據(jù)對(duì)象的索引,查看其在位圖區(qū)3中對(duì)應(yīng)的位,如果值為 "0",則將對(duì)象清除,否則不清除。為了使本發(fā)明的技術(shù)方案更加優(yōu)化,還可以引入堆碎片管理 器這個(gè)硬件結(jié)構(gòu),堆碎片管理器是將跟蹤收集器在對(duì)象清除階段 所釋放的對(duì)象占用空間進(jìn)行碎片整理回收。在堆碎片管理器的空 間回收過(guò)程中,如果待回收空間不能合并到其他空閑塊中,則需 查看EEPROM分配表中是否存在空閑的表項(xiàng),如果存在空閑的 表項(xiàng),則將待回收的空間登記到該表項(xiàng);如果無(wú)空閑表項(xiàng),則創(chuàng) 建一個(gè)新的分配表,登記待回收塊信息。如果待回收塊有相鄰空 閑塊,則修改相鄰空閑的大小(SIZE)字段,對(duì)其進(jìn)行合并。參見(jiàn)圖2,圖2是根據(jù)上述描述所總結(jié)出的發(fā)明所述Java卡 系統(tǒng)垃圾回收方法的基本流程圖,其包括以下幾個(gè)步驟步驟21,由Java卡系統(tǒng)調(diào)用垃圾回收實(shí)現(xiàn)函數(shù)。在本發(fā)明 所述的Java卡系統(tǒng)垃圾回收調(diào)用機(jī)制中,可以采用設(shè)置標(biāo)記 (TAG)的方法對(duì)垃圾回收進(jìn)行控制,應(yīng)用開(kāi)發(fā)者設(shè)置標(biāo)記后, 如果需要進(jìn)行垃圾回收,則首先判斷是否存在標(biāo)記,如果存在標(biāo) 記,則調(diào)用垃圾回收實(shí)現(xiàn)函數(shù),進(jìn)行垃圾回收,否則不進(jìn)行垃圾 回收。需要強(qiáng)調(diào)的是,鑒于智能卡嵌入式軟件系統(tǒng)及底層硬件平 臺(tái)的限制,本發(fā)明所述的Java卡的垃圾回收調(diào)用機(jī)制采用單線(xiàn)程 顯式調(diào)用的方法,所謂單線(xiàn)程就是當(dāng)垃圾收集開(kāi)始時(shí)就停止應(yīng)用 程序的運(yùn)行,顯式調(diào)用則意味著應(yīng)用開(kāi)發(fā)者必須顯式的調(diào)用垃圾 回收實(shí)現(xiàn)函數(shù)才可以進(jìn)行Java卡系統(tǒng)垃圾回收。步驟22,在鋪墊區(qū)2中對(duì)垃圾回收實(shí)現(xiàn)函數(shù)進(jìn)行初始化操 作。如上所述,在初始化過(guò)程中,將位圖區(qū)3中的所有位均置為 相同的初始化值(在圖1所示的實(shí)施例中,初始化值均置為 "0")。步驟23,由跟蹤收集器進(jìn)行對(duì)象遍歷,并在位圖區(qū)3中進(jìn)行 標(biāo)記,如上所述,在遍歷過(guò)程中,如果屬于能夠到達(dá)的對(duì)象,則 將此對(duì)象在位圖區(qū)3中對(duì)應(yīng)初始值進(jìn)行改變(在圖1所示的實(shí)施 例中,將初始值改變并標(biāo)記成"1")。步驟24,清除在位圖區(qū)3中仍為初始化值的位所對(duì)應(yīng)的對(duì)象。通過(guò)上述步驟可見(jiàn),本發(fā)明所述的Java卡系統(tǒng)垃圾回收方 法將Java卡系統(tǒng)中的廢棄空間(即對(duì)象遍歷過(guò)程中無(wú)法到達(dá)的對(duì) 象)進(jìn)行高效率的刪除、整理,使得Java智能卡的有限存儲(chǔ)空間 得到了更合理的應(yīng)用,為應(yīng)用程序的下載提供更充足的空間。當(dāng)然,為了使得本發(fā)明所述Java卡系統(tǒng)垃圾回收方法更加 優(yōu)化,還可以執(zhí)行步驟25,由堆碎片管理器進(jìn)行堆碎片整理。堆 碎片整理的過(guò)程已經(jīng)在上述描述中清楚的體現(xiàn)出來(lái)了,在此不作贅述。當(dāng)然本發(fā)明并不限于上述實(shí)施例,上述步驟中初始化值并非 一定是"0",可以根據(jù)實(shí)際情況為其它值。這些都是本領(lǐng)域內(nèi) 的一般技術(shù)人員根據(jù)上述描述能夠輕易思及的。諸如此類(lèi)的等效 變換都應(yīng)該包含在權(quán)利要求限定的范圍內(nèi)。
權(quán)利要求
1. Java卡系統(tǒng)垃圾回收方法,所述Java卡系統(tǒng)包括跟蹤收集器以及Java棧,所述Java棧中包括鋪墊區(qū)和位圖區(qū),所述方法包括以下步驟步驟一,由Java卡系統(tǒng)調(diào)用垃圾回收實(shí)現(xiàn)函數(shù);步驟二,在鋪墊區(qū)中對(duì)垃圾回收實(shí)現(xiàn)函數(shù)進(jìn)行初始化操作;步驟三,由跟蹤收集器進(jìn)行對(duì)象遍歷,并在位圖區(qū)中進(jìn)行標(biāo)記;步驟四,清除在位圖區(qū)中仍為初始化值的位所對(duì)應(yīng)的對(duì)象。
2、 根據(jù)權(quán)利要求1所述的Java卡系統(tǒng)垃圾回收方法,其特 征在于所述Java卡系統(tǒng)還包括堆碎片管理器,在執(zhí)行完步驟四 后,由堆碎片管理器進(jìn)行堆碎片整理。
3、 根據(jù)權(quán)利要求1所述的Java卡系統(tǒng)垃圾回收方法,其特 征在于所述步驟一中采用設(shè)置標(biāo)記的方法判斷是否需要調(diào)用垃圾回收函數(shù)。
4、 根據(jù)權(quán)利要求1所述的Java卡系統(tǒng)垃圾回收方法,其特 征在于在所述步驟二中,將位圖區(qū)中的所有位均置為相同的初始化值。
5、 根據(jù)權(quán)利要求4所述的Java卡系統(tǒng)垃圾回收方法,其特 征在于在步驟三所述的遍歷過(guò)程中,如果屬于能夠到達(dá)的對(duì)象,則 將此對(duì)象在位圖區(qū)中對(duì)應(yīng)的初始值進(jìn)行改變。
6、 根據(jù)權(quán)利要求5所述的Java卡系統(tǒng)垃圾回收方法,其特 征在于所述相同的初始化值為"0",所述改變后的值為'T'。
7、 根據(jù)權(quán)利要求1所述的Java卡系統(tǒng)垃圾回收方法,其特 征在于步驟二中所述的對(duì)象遍歷采用遞歸方式,遞歸的深度為4級(jí)。
8、 根據(jù)權(quán)利要求7所述的Java卡系統(tǒng)垃圾回收方法,其特 征在于所述Java棧還包括對(duì)象緩沖區(qū),如果遞歸深度超過(guò)4級(jí)但還 有可以到達(dá)的對(duì)象存在,則將后續(xù)的對(duì)象添加到此對(duì)象緩沖區(qū)。
9、 根據(jù)權(quán)利要求8所述的Java卡系統(tǒng)垃圾回收方法,其特 征在于當(dāng)對(duì)象的遞歸處理完成并返回后,將調(diào)用存放在對(duì)象緩沖區(qū) 的對(duì)象并開(kāi)始下一次遞歸及緩存。
全文摘要
本發(fā)明涉及Java卡系統(tǒng)垃圾回收方法,其包括以下步驟步驟一,由Java卡系統(tǒng)調(diào)用垃圾回收實(shí)現(xiàn)函數(shù);步驟二,在鋪墊區(qū)中對(duì)垃圾回收實(shí)現(xiàn)函數(shù)進(jìn)行初始化操作;步驟三,由跟蹤收集器進(jìn)行對(duì)象遍歷,并在位圖區(qū)中進(jìn)行標(biāo)記;步驟四,清除在位圖區(qū)中仍為初始化值的位所對(duì)應(yīng)的對(duì)象。本發(fā)明所提供的Java卡系統(tǒng)垃圾回收方法將Java卡系統(tǒng)垃圾占用的空間(即對(duì)象遍歷過(guò)程中無(wú)法到達(dá)的對(duì)象)進(jìn)行高效率整理,使得Java智能卡的有限存儲(chǔ)空間得到了更合理的應(yīng)用,為應(yīng)用程序的下載提供更充足的空間。
文檔編號(hào)G06F9/46GK101246440SQ200710026998
公開(kāi)日2008年8月20日 申請(qǐng)日期2007年2月12日 優(yōu)先權(quán)日2007年2月12日
發(fā)明者余世銳, 王禮宇 申請(qǐng)人:東信和平智能卡股份有限公司