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