專利名稱:一種Java卡垃圾回收方法
技術領域:
本發(fā)明涉及信息安全領域,特別涉及一種Java卡垃圾回收方法。
背景技術:
JAVA是純粹面向對象的編程語言,其程序以類為單位,程序運行期間會在內存中創(chuàng)建很多類的對象。這些對象在完成任務之后,Java卡的垃圾回收機制會自動釋放這些對象所占用的空間,使回收的內存能夠被再次利用,以提高程序的運行效率。垃圾回收能自動釋放內存空間,減輕編程負擔,但垃圾回收的一個潛在缺點是它的開銷會影響程序性能。當前的JCVM(Java卡虛擬機)規(guī)范沒有對Java卡中如何實現(xiàn)垃圾回收做出明確的規(guī)定,目前的智能卡中多采用mark-delete算法進行垃圾回收,運用該算法進行垃圾回收時需要對整個內存區(qū)域中的對象進行檢測,垃圾回收的效率并不高。
發(fā)明內容
鑒于現(xiàn)有技術的不足,為了避免每次進行垃圾回收時都對整個內存區(qū)域中的對象進行檢測,本發(fā)明提出了一種Java卡垃圾回收方法。本發(fā)明采用的技術方案如下一種Java卡垃圾回收的方法,Java卡虛擬機接收到命令后,對所述命令進行解析,當所述命令為第一刪除命令時執(zhí)行步驟SI,當所述命令為第二刪除命令時執(zhí)行步驟 S9,當所述命令為其它命令時根據所述命令執(zhí)行相應操作步驟SI :判斷應用程序管理集中是否有與所述第一刪除命令的數據域相對應的應用標識符,是則執(zhí)行步驟S2,否則執(zhí)行步驟S5 ;步驟S2 :判斷所述應用標識符對應的應用程序是否滿足刪除條件,是則將垃圾回收標志位置為有效執(zhí)行步驟S3,否則執(zhí)行步驟S12 ;步驟S3 :查找所述應用程序的對象、子孫對象,以及查找所述應用程序的應用標識符的對象、子孫對象,回收所述應用程序的對象、子孫對象以及所述應用標識符的對象、 子孫對象在Java卡存儲區(qū)域中占用的空間,回收所述應用程序的對象、子孫對象以及所述應用標識符的對象、子孫對象的對象索弓I值在對象管理表中占用的空間;步驟S4 :若所述步驟S3中的操作成功完成,則將所述垃圾回收標志位置為無效, 執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟 S12 ;步驟S5 :判斷包管理集中是否有與所述第一刪除命令的數據域相對應的應用標識符,是則執(zhí)行步驟S6,否則執(zhí)行步驟S12 ;步驟S6 :判斷所述應用標識符對應的包是否包含應用程序,是則執(zhí)行步驟S12,否則將所述垃圾回收標志位置為有效,執(zhí)行步驟S7 ;步驟S7 :查找所述包的對象、子孫對象,回收所述包的對象、子孫對象在所述Java 卡存儲區(qū)域中占用的空間,回收所述包的對象、子孫對象的對象索引值在所述對象管理表中占用的空間;步驟S8 :若所述步驟S7中的操作成功完成,則將所述垃圾回收標志位置為無效, 執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟 S12 ;步驟S9 :判斷所述包包含的應用程序是否滿足刪除條件,是則將垃圾回收標志位置為有效,執(zhí)行步驟S10,否則執(zhí)行步驟S12 ;步驟SlO :查找所述包包含的應用程序的對象、子孫對象,以及查找所述包的應用標識符的對象、子孫對象,回收所述應用程序的對象、子孫對象以及所述應用標識符的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間,回收所述應用程序的對象、子孫對象以及所述應用標識符的對象、子孫對象的對象索引值在所述對象管理表中占用的空間,查找所述包的對象、子孫對象,回收所述包的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間,回收所述包的對象、子孫對象的對象索引值在所述對象管理表中占用的空間,回收所述應用標識符在所述包管理集中占用的空間;步驟Sll :若所述步驟SlO中的操作成功完成,則將所述垃圾回收標志位置為無效,執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟S12 ;步驟S12 :判斷所述垃圾回收標志位是否有效,是則執(zhí)行垃圾回收操作,否則所述 Java卡虛擬機等待接收命令,且在接收到命令后對所述命令進行解析以及根據所述命令執(zhí)行相應操作。當所述Java卡虛擬機首次上電時,判斷所述垃圾回收標志位是否有效,是則執(zhí)行垃圾回收操作,否則所述Java卡虛擬機等待接收命令,且在接收到命令后對所述命令進行解析以及根據所述命令執(zhí)行相應操作。當垃圾回收開始接口被調用時,所述Java卡虛擬機將所述垃圾回收標志位置為有效。所述對所述命令進行解析具體包括判斷所述命令的第一字節(jié)是否為80或84,當判斷結果為是時檢測所述命令的第二字節(jié)是否為E4 ;當判斷結果為否時判定所述命令為其它命令;當所述命令的第二字節(jié)為E4時,檢測所述命令第四字節(jié);當所述命令的第二字節(jié)不為E4時,所述Java卡虛擬機繼續(xù)等待接收命令;當所述第四字節(jié)為00時,判定所述命令為第一刪除命令;當所述第四字節(jié)為80 時,判定所述命令為第二刪除命令。所述垃圾回收操作具體包括①根據所述對象管理表中對象索引值的個數在RAM中開辟相應大小的位圖區(qū),并將所述位圖區(qū)中所有位的值置為初始值;②根據所述對象索引值對所述Java卡存儲區(qū)域中的對象進行遍歷,并將位圖區(qū)中與能夠訪問到的對象對應的位的值置為有效值;③回收與所述位圖區(qū)中值為初始值的位相對應的對象在所述Java卡存儲區(qū)域中占用的空間;④回收與所述位圖區(qū)中值為初始值的位相對應的對象的對象索引值在所述對象管理表中占用的空間;⑤將所述垃圾回收標志位置為無效,釋放所述位圖區(qū)占用的存儲空間,判斷所述垃圾回收標志位是否有效,是則執(zhí)行垃圾回收操作,否則所述Java卡虛擬機等待接收命令,且在接收到命令后對所述命令進行解析以及根據所述命令執(zhí)行相應操作。所述判斷所述應用標識符對應的應用程序是否滿足刪除條件具體為判斷所述應用程序是否同時滿足①所述應用程序未生成其它包的靜態(tài)變量;②所述應用程序未在具有兩個及以上實例的同時又含有靜態(tài)變量;③所述應用程序以外的應用程序的對象數組中不包含在所述應用程序中生成的對象;當所述應用程序同時滿足上述三個條件時,所述應用程序滿足刪除條件;當所述應用程序不同時滿足上述三個條件時,所述應用程序不滿足刪除條件,所述Java卡虛擬機判斷所述垃圾回收標志是否有效。所述查找所述應用程序的對象、子孫對象的具體方法為①查找應用程序管理集,獲取所述應用程序對象的ID ;②根據所述應用程序對象的ID查找所述應用程序對象的地址;③根據所述應用程序對象的地址中的數據查找所述應用程序的對象;④查找對象管理表,獲取所述應用程序的對象的ID ;⑤根據所述應用程序的對象的ID查找所述應用程序的對象的地址;⑥根據所述應用程序的對象的地址中的數據查找所述應用程序的子孫對象。所述查找所述應用標識符的對象、子孫對象的具體方法為①查找所述應用標識符的地址;②根據所述應用標識符的地址中的數據查找所述應用標識符的對象;③查找對象管理表,獲取所述應用標識符的對象的ID ;④根據所述應用標識符的對象的ID查找所述應用標識符的對象的地址;⑤根據所述應用標識符的對象的地址中的數據查找所述應用標識符包含的子孫對象。所述查找所述包的對象、子孫對象的具體方法為①查找包管理集,獲取所述包對象的ID ;②根據所述包對象的ID查找所述包對象的地址;③根據所述包對象的地址中的數據查找所述包的對象;④查找對象管理表,獲取所述包的對象的ID ;⑤根據所述包的對象的ID查找所述包的對象的地址;⑥根據所述包t的對象的地址中的數據查找所述包的子孫對象。當所述垃圾回收標志位的值為true時,所述垃圾回收標志位有效,當所述垃圾回收標志位的值為false時,所述垃圾回收標志位無效。本發(fā)明的有益效果在于本發(fā)明提供的一種Java卡垃圾回收方法可以避免在每次垃圾回收時都對整個內存區(qū)域中的對象進行檢測,減少垃圾回收的開銷、提高垃圾回收的效率,所述Java卡垃圾回收方法中還保留了掉電保護功能,防止在垃圾回收過程中Java卡虛擬機的異常掉電。
圖I為本發(fā)明實施例二中提供的一種Java卡垃圾回收方法的方法流程圖;圖2為本發(fā)明實施例二中提供的一種Java卡垃圾回收方法中執(zhí)行第一刪除命令的方法流程圖;圖3為本發(fā)明實施例二中提供的一種Java卡垃圾回收方法中執(zhí)行第二刪除命令的方法流程圖。
具體實施例方式為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖和具體實施例對本發(fā)明做進一步地詳細說明。實施例一為了避免每次進行垃圾回收時都對整個內存區(qū)域中的對象進行檢測,提高垃圾回收的效率和減少垃圾回收的開銷,本實施例一提供了一種Java卡垃圾回收方法,所述Java 卡垃圾回收方法中保留了掉電保護功能,防止在垃圾回收過程中Java卡虛擬機的異常掉電。具體包括Java卡虛擬機接收到命令后,對所述命令進行解析,當所述命令為第一刪除命令時執(zhí)行步驟SI,當所述命令為第二刪除命令時執(zhí)行步驟S9,當所述命令為其它命令時根據所述命令執(zhí)行相應操作步驟SI :判斷applet (應用程序)管理集中是否有與所述第一刪除命令的數據域相對應的AID (應用標識符),是則執(zhí)行步驟S2,否則執(zhí)行步驟S5 ;步驟S2 :判斷所述AID對應的applet是否滿足刪除條件,是則將垃圾回收標志位置為有效執(zhí)行步驟S3,否則執(zhí)行步驟S12 ;步驟S3 :查找所述applet的對象、子孫對象,以及查找所述applet的AID的對象、 子孫對象,回收所述applet的對象、子孫對象以及所述AID的對象、子孫對象在Java卡存儲區(qū)域中占用的空間,回收所述applet的對象、子孫對象以及所述AID的對象、子孫對象的對象索引值在對象管理表中占用的空間;步驟S4 :若所述步驟S3中的操作成功完成,則將所述垃圾回收標志位置為無效, 執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟 S12 ;步驟S5 :判斷package (包)管理集中是否有與所述第一刪除命令的數據域相對應的AID,是則執(zhí)行步驟S6,否則執(zhí)行步驟S12 ;步驟S6 :判斷所述AID對應的package是否包含package,是則執(zhí)行步驟S12,否則將所述垃圾回收標志位置為有效,執(zhí)行步驟S7 ;步驟S7 :查找所述package的對象、子孫對象,回收所述package的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間,回收所述package的對象、子孫對象的對象索引值在所述對象管理表中占用的空間;
步驟S8 :若所述步驟S7中的操作成功完成,則將所述垃圾回收標志位置為無效, 執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟 S12 ;步驟S9 :判斷所述package包含的applet是否滿足刪除條件,是則將垃圾回收標志位置為有效,執(zhí)行步驟S10,否則執(zhí)行步驟S12 ;步驟SlO :查找所述package包含的applet的對象、子孫對象,以及查找所述 package的AID的對象、子孫對象,回收所述applet的對象、子孫對象以及所述AID的對象、 子孫對象在所述Java卡存儲區(qū)域中占用的空間,回收所述applet的對象、子孫對象以及所述AID的對象、子孫對象的對象索引值在所述對象管理表中占用的空間,查找所述package 的對象、子孫對象,回收所述package的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間,回收所述package的對象、子孫對象的對象索引值在所述對象管理表中占用的空間,回收所述AID在所述package管理集中占用的空間;步驟Sll :若所述步驟SlO中的操作成功完成,則將所述垃圾回收標志位置為無效,執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟S12 ;步驟S12 :判斷所述垃圾回收標志位是否有效,是則執(zhí)行垃圾回收操作,否則所述 Java卡虛擬機等待接收命令,且在接收到命令后對所述命令進行解析以及根據所述命令執(zhí)行相應操作。實施例二為了避免每次進行垃圾回收時都對整個內存區(qū)域中的對象進行檢測,提高垃圾回收的效率和減少垃圾回收的開銷,參見圖1、2、3,本實施例二提供了一種Java卡垃圾回收方法。具體地,Java卡虛擬機上電后,執(zhí)行以下步驟步驟101 :判斷垃圾回收標志位是否有效,是則執(zhí)行步驟109,開始垃圾回收,否則所述Java卡虛擬機等待接收命令,當接收到命令后執(zhí)行步驟102 ;優(yōu)選地,在本實施例中,當所述垃圾回收標志位的值為true時,所述垃圾回收標志位有效,當所述垃圾回收標志位的值為false時,所述垃圾回收標志位無效;其中,所述Java卡虛擬機接收到的命令為標準的APDU命令。步驟102 :判斷接收到的命令的CLA(指令類別)是否為80或84,是則執(zhí)行步驟 103,否則執(zhí)行步驟105 ;步驟103 :判斷所述命令的INS (指令碼)是否為E4,是則執(zhí)行步驟104,否則所述 Java卡虛擬機等待接收命令,當接收到命令后執(zhí)行步驟102 ;步驟104 :檢測所述命令的參數P2的值,當所述參數P2的值為00時,所述Java卡虛擬機接收到的為第一刪除命令,執(zhí)行步驟201,當所述參數P2的值為80時,所述Java卡虛擬機接收到的為第二刪除命令,執(zhí)行步驟301 ;步驟105 :根據所述命令開始執(zhí)行相應操作;具體地,所述相應操作為虛擬機為所述Java卡虛擬機根據所述命令執(zhí)行的一系列操作。步驟106 :判斷是否調用了垃圾回收開始接口,是則執(zhí)行步驟107,否則執(zhí)行步驟
108;
步驟107 :將所述垃圾回收標志位置為有效;步驟108 :判斷所述相應操作是否完成,是則返回執(zhí)行步驟101,否則返回執(zhí)行步驟 105 ;步驟109 :根據對象管理表中對象索引值的個數計算位圖區(qū)的大小,并在RAM中開辟相應大小的位圖區(qū);其中,所述位圖區(qū)用于存儲對象標識,每一對象標識對應所述對象管理表中的一個對象索引值,進而對應Java卡存儲區(qū)域中的一個對象,優(yōu)選地,在本實施例中,所述對象標識為一個比特位,例如當所述對象管理表中對象索引值的個數為80時,則所述位圖區(qū)的大小為80比特,具體地,所述對象管理表存儲于Java卡的EEPROM中。步驟110 :將所述位圖區(qū)中所有對象標識的值置為初始值;優(yōu)選地,在本實施例中所述初始值為O。步驟111 :根據所述對象管理表中的對象索引值對Java卡存儲區(qū)域中的對象進行遍歷,并將位圖區(qū)中能夠訪問到的對象對應的對象標識的值置為有效值;優(yōu)選地,在本實施例中所述有效值為I。步驟112 :回收與所述位圖區(qū)中值仍為初始值的對象標識相對應的對象在Java卡存儲區(qū)域中占用的空間;步驟113 :回收所述對象的對象索引值在所述對象管理表中占用的空間;步驟114 :將所述垃圾回收標志位置為無效,釋放位圖區(qū)占用的存儲空間;在執(zhí)行完步驟114后Java卡虛擬機等待接收命令,并根據接收到的命令進行相應處理。參見圖2,當所述參數P2的值為00時,所述Java卡虛擬機接收到的為第一刪除命令,執(zhí)行步驟201 ;步驟201 :判斷applet管理集中是否有與所述命令相對應的AID,是則執(zhí)行步驟 202,否則執(zhí)行步驟208 ;其中,所述applet管理集存儲于Java卡的EEPROM中,用于存儲Java卡中applet 的應用標識符AID ;所述命令的Data部分包含所要刪除的applet或package的AID。步驟202 :判斷與所述AID相對應的applet是否滿足刪除條件,是則執(zhí)行步驟 203,否則返回執(zhí)行步驟101 ;具體地,在本實施例中,所述判斷與所述AID相對應的applet是否滿足刪除條件具體為判斷所述applet是否生成了其它package的靜態(tài)變量;判斷所述applet是否在具有兩個及以上實例的同時又含有靜態(tài)變量;判斷所述applet以外的applet的對象數組中是否有包含了在所述applet中生成的對象;當上述三個判斷的判斷結果中至少有一個為是時,則所述applet不滿足刪除條件,其中所述三個判斷可同時進行,或分別進行(無順序限制),可當三個判斷均完成時判斷所述applet是否滿足刪除條件,或當得到一個判斷的判斷結果為是時則判定所述applet不滿足刪除條件。其中①判斷所述applet是否生成了其它package的靜態(tài)變量的具體方法為根據 package管理集,得到除所述applet所在package外的package的地址,從所述的地址中得到靜態(tài)變量的個數及偏移地址,查找靜態(tài)變量并根據靜態(tài)變量的防火墻值判斷是否在所述 applet中生成;②所述判斷所述applet是否在具有兩個及以上實例的同時又含有靜態(tài)變量的具體方法為判斷所述applet屬于哪個類,查找applet管理集,判斷除所述applet外是否還有與所述applet屬于同一類的applet,有則所述applet具有至少兩個實例;查找applet管理集,根據所述applet的ID得到所述applet的地址,從所述地址存儲的數據中獲取所述applet包含的靜態(tài)變量的個數,當所述個數不為O時,即所述 applet包含靜態(tài)變量;③判斷所述applet以外的applet的對象數組中是否有包含了在所述applet中生成的對象的具體方法為根據所述applet以外的applet的對象數組中對象的防火墻值判斷是否有在所述 applet中生成的對象。步驟203 :將所述垃圾回收標志位置為有效;步驟204 :查找所述applet的對象、子孫對象以及所述AID的對象、子孫對象;具體地,在本實施例中,所述查找所述applet的對象、子孫對象具體包括①查找applet管理集,獲取所述applet對象的ID;②根據所述applet對象的ID查找所述applet對象的地址;③根據所述applet對象的地址中的數據查找所述applet的對象;具體地,所述applet對象的地址中的數據包含所述applet自身的對象的開始地址、所述applet自身的對象的個數、所述applet的父類的地址,其中,所述applet的對象包括所述applet自身的對象和其父類的對象,所述其父類的對象又包括其父類自身的對象和其父類的父類的對象,依此類推直至某個父類沒有父類為止,所述applet的各對象的地址是連續(xù)的。④查找對象管理表,獲取所述applet的對象的ID ;⑤根據所述applet的對象的ID查找所述applet的對象的地址;⑥根據所述applet的對象的地址中的數據查找所述applet的子孫對象。具體地,所述applet的對象的地址中的數據包含所述applet包含的子孫對象的開始地址以及所述applet包含的子孫對象的個數,其中,所述applet包含的各子孫對象的地址是連續(xù)的。所述查找所述AID的對象、子孫對象具體包括①查找所述AID的地址;②根據所述AID的地址中的數據查找所述AID的對象;具體地,所述AID的地址中的數據包含所述AID自身的對象的開始地址、所述 AID自身的對象的個數、所述AID父類的地址,其中,所述AID的對象包括所述AID自身的對象和其父類的對象,所述其父類的對象又包括其父類自身的對象和其父類的父類的對象, 依此類推直至某個父類沒有父類為止,所述AID的各對象的地址是連續(xù)的;③查找對象管理表,獲取所述AID的對象的ID ;④根據所述AID的對象的ID查找所述AID的對象的地址;⑤根據所述AID的對象的地址中的數據查找所述AID包含的子孫對象。具體地,所述AID的對象的地址中的數據包含所述AID包含的子孫對象的開始地址以及所述AID包含的子孫對象的個數,其中,所述AID包含的各子孫對象的地址是連續(xù)的。步驟205 :回收所述applet的對象、子孫對象,以及所述AID的對象、子孫對象在 Java卡存儲區(qū)域中占用的空間;步驟206 :回收所述applet的對象、子孫對象,以及所述AID的對象、子孫對象的對象索引值在對象管理表中占用的空間;步驟207 :將垃圾回收標志位置為無效,返回執(zhí)行步驟101 ;步驟208 :判斷package管理集中是否有與所述命令相對應的AID,是則執(zhí)行步驟 209,否則返回執(zhí)行步驟101 ; 其中,所述package管理集存儲于Java卡的EEPROM中,用于存儲Java卡中 package的應用標識符AID。步驟209 :判斷與所述AID相對應的package中是否包含applet,是則執(zhí)行步驟 101,否則執(zhí)行步驟210 ;具體地,所述判斷與所述AID對應的package中是否包含applet的具體方法為 判斷所述applet管理集中是否還有與所述package所包含的applet相對應的AID。步驟210 :將垃圾回收標志位置為有效;步驟211 :查找所述package的對象、子孫對象;具體地,在本實施例中,所述查找所述package的對象、子孫對象具體包括①查找package管理集,獲取所述package對象的ID ;②根據所述package對象的ID查找所述package對象的地址;③根據所述package對象的地址中的數據查找所述package的對象;具體地,所述package對象的地址中的數據包含所述package自身的對象的開始地址、所述package自身的對象的個數、所述package的父類的地址,其中,所述package的對象包括所述package自身的對象和其父類的對象,所述其父類的對象又包括其父類自身的對象和其父類的父類的對象,依此類推直至某個父類沒有父類為止,所述package的各對象的地址是連續(xù)的。④查找對象管理表,獲取所述packaget的對象的ID ;⑤根據所述package的對象的ID查找所述package的對象的地址;⑥根據所述packaget的對象的地址中的數據查找所述package的子孫對象。具體地,所述package的對象的地址中的數據包含所述package的子孫對象的開始地址以及所述package的子孫對象的個數,其中,所述package的各子孫對象的地址是連續(xù)的。步驟212 :回收所述package的對象、子孫對象在Java卡存儲區(qū)域中占用的空間;
步驟213 :回收所述package的對象、子孫對象的對象索引值在所述對象管理表中占用的空間;步驟214 :將垃圾回收標志位置為無效,返回執(zhí)行步驟101 ;參見圖3,當所述參數P2的值為80時,所述Java卡虛擬機接收到的為第二刪除命令,執(zhí)行步驟301 ;步驟301 :判斷package管理集中是否有與所述命令相對應的AID,是則執(zhí)行步驟 302,否則返回執(zhí)行步驟101 ;步驟302 :在applet管理集中查找與所述AID相對應的package所包含的applet 的 AID ;具體地,在本實施例中,與所述AID相對應的package所包含的applet可以為多個。步驟303 :判斷所述applet是否滿足刪除條件,是則執(zhí)行步驟304,否則返回執(zhí)行步驟101 ;具體地,判斷所述applet是否滿足刪除條件的方法與步驟202中的判斷方法相同,在此不再贅述。步驟304 :將垃圾回收標志位置為有效;步驟305 :查找所述applet的對象、子孫對象以及所述AID的對象、子孫對象;具體地,在本實施例中,所述查找所述applet的對象、子孫對象的方法與步驟204 中查找applet的對象、子孫對象的方法相同;所述查找所述AID的對象、子孫對象與步驟 204中查找AID的對象、子孫對象的方法相同,在此不再贅述。步驟306 :回收所述applet的對象、子孫對象以及所述AID的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間;步驟307 :回收所述applet的對象、子孫對象以及所述AID的對象、子孫對象的對象索引值在所述對象管理表中占用的空間;步驟308 :查找所述package的對象、子孫對象;具體地,在本實施例中,所述查找所述package的對象、子孫對象的方法與步驟 211中查找package的對象、子孫對象的方法相同,在此不再贅述。步驟309 :回收所述package的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間;步驟310 :回收所述package的對象、子孫對象的對象索引值在所述對象管理表中占用的空間;步驟311 :回收所述AID在package管理集中所占用的空間;步驟312 :將垃圾回收標志位置為無效,返回執(zhí)行步驟101。以上所述的實施例只是本發(fā)明較優(yōu)選的具體實施方式
,本領域的技術人員在本發(fā)明技術方案范圍內進行的通常變化和替換都應包含在本發(fā)明的保護范圍內。
權利要求
1.一種Java卡垃圾回收的方法,其特征在于Java卡虛擬機接收到命令后,對所述命令進行解析,當所述命令為第一刪除命令時執(zhí)行步驟SI,當所述命令為第二刪除命令時執(zhí)行步驟S9,當所述命令為其它命令時根據所述命令執(zhí)行相應操作步驟SI :判斷應用程序管理集中是否有與所述第一刪除命令的數據域相對應的應用標識符,是則執(zhí)行步驟S2,否則執(zhí)行步驟S5 ;步驟S2 :判斷所述應用標識符對應的應用程序是否滿足刪除條件,是則將垃圾回收標志位置為有效執(zhí)行步驟S3,否則執(zhí)行步驟S12 ;步驟S3 :查找所述應用程序的對象、子孫對象,以及查找所述應用程序的應用標識符的對象、子孫對象,回收所述應用程序的對象、子孫對象以及所述應用標識符的對象、子孫對象在Java卡存儲區(qū)域中占用的空間,回收所述應用程序的對象、子孫對象以及所述應用標識符的對象、子孫對象的對象索引值在對象管理表中占用的空間;步驟S4:若所述步驟S3中的操作成功完成,則將所述垃圾回收標志位置為無效,執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟 S12 ;步驟S5 :判斷包管理集中是否有與所述第一刪除命令的數據域相對應的應用標識符, 是則執(zhí)行步驟S6,否則執(zhí)行步驟S12 ;步驟S6 :判斷所述應用標識符對應的包是否包含應用程序,是則執(zhí)行步驟S12,否則將所述垃圾回收標志位置為有效,執(zhí)行步驟S7 ;步驟S7 :查找所述包的對象、子孫對象,回收所述包的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間,回收所述包的對象、子孫對象的對象索引值在所述對象管理表中占用的空間;步驟S8:若所述步驟S7中的操作成功完成,則將所述垃圾回收標志位置為無效,執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟 S12 ;步驟S9 :判斷所述包包含的應用程序是否滿足刪除條件,是則將垃圾回收標志位置為有效,執(zhí)行步驟S10,否則執(zhí)行步驟S12 ;步驟SlO :查找所述包包含的應用程序的對象、子孫對象,以及查找所述包的應用標識符的對象、子孫對象,回收所述應用程序的對象、子孫對象以及所述應用標識符的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間,回收所述應用程序的對象、子孫對象以及所述應用標識符的對象、子孫對象的對象索引值在所述對象管理表中占用的空間,回收所述包的對象、子孫對象在所述Java卡存儲區(qū)域中占用的空間,回收所述包的對象、子孫對象的對象索引值在所述對象管理表中占用的空間,回收所述應用標識符在所述包管理集中占用的空間;步驟Sll :若所述步驟SlO中的操作成功完成,則將所述垃圾回收標志位置為無效,執(zhí)行步驟S12,若在所述Java卡虛擬機在執(zhí)行上述操作過程中掉電,則重新上電后執(zhí)行步驟 S12 ;步驟S12 :判斷所述垃圾回收標志位是否有效,是則執(zhí)行垃圾回收操作,否則所述Java 卡虛擬機等待接收命令,且在接收到命令后對所述命令進行解析以及根據所述命令執(zhí)行相應操作。
2.如權利要求I所述的方法,其特征在于,還包括當所述Java卡虛擬機首次上電時,判斷所述垃圾回收標志位是否有效,是則執(zhí)行垃圾回收操作,否則所述Java卡虛擬機等待接收命令,且在接收到命令后對所述命令進行解析以及根據所述命令執(zhí)行相應操作。
3.如權利要求2所述的方法,其特征在于,還包括當垃圾回收開始接口被調用時,所述Java卡虛擬機將所述垃圾回收標志位置為有效。
4.如權利要求3所述的方法,其特征在于,所述對所述命令進行解析具體包括判斷所述命令的第一字節(jié)是否為80或84,當判斷結果為是時檢測所述命令的第二字節(jié)是否為E4 ;當判斷結果為否時判定所述命令為其它命令;當所述命令的第二字節(jié)為E4時,檢測所述命令第四字節(jié);當所述命令的第二字節(jié)不為 E4時,所述Java卡虛擬機繼續(xù)等待接收命令;當所述第四字節(jié)為00時,判定所述命令為第一刪除命令;當所述第四字節(jié)為80時,判定所述命令為第二刪除命令。
5.如權利要求4所述的方法,其特征在于,所述垃圾回收操作具體包括①根據所述對象管理表中對象索引值的個數在RAM中開辟相應大小的位圖區(qū),并將所述位圖區(qū)中所有位的值置為初始值;②根據所述對象索引值對所述Java卡存儲區(qū)域中的對象進行遍歷,并將位圖區(qū)中與能夠訪問到的對象對應的位的值置為有效值;③回收與所述位圖區(qū)中值為初始值的位相對應的對象在所述Java卡存儲區(qū)域中占用的空間;④回收與所述位圖區(qū)中值為初始值的位相對應的對象的對象索引值在所述對象管理表中占用的空間;⑤將所述垃圾回收標志位置為無效,釋放所述位圖區(qū)占用的存儲空間,判斷所述垃圾回收標志位是否有效,是則執(zhí)行垃圾回收操作,否則所述Java卡虛擬機等待接收命令,且在接收到命令后對所述命令進行解析以及根據所述命令執(zhí)行相應操作。
6.如權利要求I所述的方法,其特征在于,所述判斷所述應用標識符對應的應用程序是否滿足刪除條件具體為判斷所述應用程序是否同時滿足①所述應用程序未生成其它包的靜態(tài)變量;②所述應用程序未在具有兩個及以上實例的同時又含有靜態(tài)變量;③所述應用程序以外的應用程序的對象數組中不包含在所述應用程序中生成的對象;當所述應用程序同時滿足上述三個條件時,所述應用程序滿足刪除條件;當所述應用程序不同時滿足上述三個條件時,所述應用程序不滿足刪除條件,所述Java卡虛擬機判斷所述垃圾回收標志是否有效。
7.如權利要求I所述的方法,其特征在于,所述查找所述應用程序的對象、子孫對象的具體方法為①查找應用程序管理集,獲取所述應用程序對象的ID;②根據所述應用程序對象的ID查找所述應用程序對象的地址;③根據所述應用程序對象的地址中的數據查找所述應用程序的對象;④查找對象管理表,獲取所述應用程序的對象的ID;⑤根據所述應用程序的對象的ID查找所述應用程序的對象的地址;⑥根據所述應用程序的對象的地址中的數據查找所述應用程序的子孫對象。
8.如權利要求I所述的方法,其特征在于,所述查找所述應用標識符的對象、子孫對象的具體方法為①查找所述應用標識符的地址;②根據所述應用標識符的地址中的數據查找所述應用標識符的對象;③查找對象管理表,獲取所述應用標識符的對象的ID;④根據所述應用標識符的對象的ID查找所述應用標識符的對象的地址;⑤根據所述應用標識符的對象的地址中的數據查找所述應用標識符包含的子孫對象。
9.如權利要求I所述的方法,其特征在于,所述查找所述包的對象、子孫對象的具體方法為①查找包管理集,獲取所述包對象的ID;②根據所述包對象的ID查找所述包對象的地址;③根據所述包對象的地址中的數據查找所述包的對象;④查找對象管理表,獲取所述包的對象的ID;⑤根據所述包的對象的ID查找所述包的對象的地址;⑥根據所述包的對象的地址中的數據查找所述包的子孫對象。
10.如權利要求1-9中任意一項權利要求所述的方法,其特征在于,當所述垃圾回收標志位的值為true時,所述垃圾回收標志位有效,當所述垃圾回收標志位的值為false時,所述垃圾回收標志位無效。
全文摘要
本發(fā)明公開了一種Java卡垃圾回收的方法,屬于信息安全領域。所述方法包括Java卡虛擬機上電后判斷垃圾回收標志是否有效,是則執(zhí)行垃圾回收操作,否則等待接收命令,當接收到命令后對命令進行解析,若所述命令為第一刪除命令且應用程序管理集中有與所述命令數據域對應的應用標識符,則執(zhí)行刪除應用程序操作,若所述命令為第一刪除命令且包管理集中有與所述命令數據域對應的應用標識符,則執(zhí)行刪除包操作;若所述命令為第二刪除命令,則執(zhí)行刪除包及其包含的應用程序操作,若所述命令為其它命令則根據所述命令執(zhí)行相應操作。該方法具有減少垃圾回收的開銷、提高垃圾回收的效率,防止在垃圾回收過程中Java卡虛擬機的異常掉電的優(yōu)點。
文檔編號G06F12/02GK102591788SQ201110439970
公開日2012年7月18日 申請日期2011年12月23日 優(yōu)先權日2011年12月23日
發(fā)明者于華章, 陸舟 申請人:飛天誠信科技股份有限公司