專利名稱:一種Java卡中垃圾回收的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及智能卡技術(shù)領(lǐng)域,尤其涉及一種Java卡中垃圾回收的方法及裝置。
背景技術(shù):
Java卡是可以運行Java程序代碼的智能卡,在Java卡中實現(xiàn)了應(yīng)用程序 (Applet)運行所需的運行環(huán)境,負責解釋Java語音的虛擬機,以及標準的系統(tǒng)應(yīng)用程序編程接口(Application Programming Interface, API),為 Applet 在 Java 卡上的運行提供了保證,其中,Applet是運行在智能卡上的特定應(yīng)用程序。Java語言的一大優(yōu)勢是,在Java運行環(huán)境中可以自主確定垃圾對象(不再使用的對象)并將其回收。具體的,Java堆是Java的數(shù)據(jù)區(qū),而Java類的實例對象是從Java堆中分配空間,在個人電腦(PC)上,Java堆是保存在RAM上,而在Java卡中,Java堆是保存在非易失性存儲器(如EEPR0M)上。所謂垃圾回收的主要功能就是發(fā)現(xiàn)那些不再被引用的對象(即垃圾對象),并釋放這些垃圾對象占用的空間,而垃圾回收機制就是用時間換取空間,即通過增加系統(tǒng)運行時間,來釋放堆空間。傳統(tǒng)的Java卡垃圾回收機制是被動式回收,主要體現(xiàn)在以下兩個方面1、利用用戶編寫的Applet調(diào)用Java卡類庫的垃圾回收API,在用戶認為合適的時機,通過垃圾回收 API調(diào)用虛擬機(VM)執(zhí)行垃圾回收操作;2、在某個Applet被刪除時,由虛擬機執(zhí)行垃圾回收操作。被動式垃圾回收對時間要求較高,一般需要遍歷整個對象表,確定垃圾對象并進行標記,再將帶有標記的垃圾對象回收,這就造成進行垃圾對象回收的效率較低,并且,由于 Java堆是在非易失性存儲器上,如果清除和移動的垃圾對象較多,則垃圾回收需要的時間就會非常長。然而,有效的時間管理和高效的運行速度是決定智能卡性能的重要因素,因此提高垃圾回收的效率,成為Java卡中垃圾回收的重要課題。
發(fā)明內(nèi)容
本發(fā)明提供一種Java卡中垃圾回收的方法及裝置,用以Java卡主動進行垃圾回收,并且采用分階段垃圾回收的方式,使得垃圾回收操作分布在多個小的時間片內(nèi),避免了現(xiàn)有技術(shù)中一次性回收Java卡中的所有垃圾而占用過多時間的問題,提高了 Java卡中垃圾回收的效率。本發(fā)明實施例提供的具體技術(shù)方案包括一種Java卡中垃圾回收的方法,包括在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作;若根據(jù)所述賦值操作確定創(chuàng)建的對象未被靜態(tài)對象所引用,則將該未被靜態(tài)對象所引用的對象確定為垃圾對象;在函數(shù)執(zhí)行結(jié)束時,對Java卡中的垃圾對象進行回收。一種Java卡中垃圾回收的裝置,包括第一處理單元,用于在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作;第二處理單元,用于根據(jù)所述賦值操作確定創(chuàng)建的對象未被靜態(tài)對象所引用時, 將該未被靜態(tài)對象所引用的對象確定為垃圾對象;第三處理單元,用于在函數(shù)執(zhí)行結(jié)束時,對Java卡中的垃圾對象進行回收。基于上述技術(shù)方案,本發(fā)明實施例中,通過在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作,在根據(jù)賦值操作確定確定創(chuàng)建的對象未被靜態(tài)對象所引用, 則將該未被靜態(tài)對象所引用的對象確定為垃圾對象,在函數(shù)執(zhí)行結(jié)束時,對Java卡中的垃圾對象進行回收,從而可以在Java卡中的函數(shù)執(zhí)行過程中確定垃圾對象,在函數(shù)執(zhí)行結(jié)束時,對垃圾對象并回收,以函數(shù)為基本單位,采用局部分階段的方式進行垃圾回收,將垃圾回收操作占用的時間均勻分布在整個Java卡的執(zhí)行期間,避免了現(xiàn)有技術(shù)中一次性集中回收Java卡中的所有垃圾而占用過多時間的問題,將非常耗時的垃圾回收分布在很短的時間片內(nèi),從而提高了 Java卡垃圾回收的效率,提高了 Java卡的時效性,完善了 Java卡的功能,也無需遍歷整個對象表,節(jié)約了時間。并且,采用Java卡主動回收的方式,避免了現(xiàn)有技術(shù)中Java卡被動回收時,對Java卡的正常使用帶來的影響,提高Java卡的性能。
圖1為本發(fā)明實施例中Java卡中垃圾回收的裝置結(jié)構(gòu)圖;圖2為本發(fā)明實施例中Java卡中垃圾回收的方法流程圖。
具體實施例方式為了提高Java卡中垃圾回收的效率,實現(xiàn)Java卡主動地、分階段地進行垃圾回收的目的,本發(fā)明實施例提供了一種Java卡中垃圾回收的方法及裝置,該方法為在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作,若根據(jù)賦值操作確定創(chuàng)建的對象未被靜態(tài)對象所引用,則將該未被靜態(tài)對象所引用的對象確定為垃圾對象,在函數(shù)執(zhí)行結(jié)束時,對Java卡中的垃圾對象進行回收。下面結(jié)合附圖對本發(fā)明優(yōu)選的實施方式進行詳細說明。如附圖1所示,本發(fā)明實施例中,Java卡中垃圾回收的裝置主要包括以下處理單元第一處理單元101,用于在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作;第二處理單元102,用于根據(jù)賦值操作確定創(chuàng)建的對象未被靜態(tài)對象所引用時,將該未被靜態(tài)對象所引用的對象確定為垃圾對象;第三處理單元103,用于在函數(shù)執(zhí)行結(jié)束時,對Java卡中的垃圾對象進行回收?;谏鲜鱿到y(tǒng)架構(gòu),本發(fā)明實施例中,如附圖2所示,在Java卡中進行垃圾回收的詳細方法流程如下步驟201 在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作。較佳地,在監(jiān)控到創(chuàng)建對象操作時,針對創(chuàng)建的對象設(shè)置引用次數(shù),并將引用次數(shù)設(shè)定為初始值;在監(jiān)控到對靜態(tài)對象的賦值操作時,統(tǒng)計靜態(tài)對象所引用的對象的引用次數(shù)。
例如,在監(jiān)控到創(chuàng)建對象操作時,將該對象對應(yīng)的引用次數(shù)初始化為零值。步驟202 若根據(jù)賦值操作確定創(chuàng)建的對象未被靜態(tài)對象所引用,則將該未被靜態(tài)對象所引用的對象確定為垃圾對象。本實施例中,通過統(tǒng)計賦值操作中靜態(tài)對象所引用的對象的引用次數(shù),確定所引用的對象是否被靜態(tài)對象所引用,以進一步確定所引用的對象是否為垃圾對象。較佳地,在統(tǒng)計靜態(tài)對象所引用的對象的引用次數(shù)時,若監(jiān)控到賦值操作,則將該賦值操作中被引用的對象的引用次數(shù)增加設(shè)定數(shù)值;若監(jiān)控到重復(fù)賦值操作,則將該重復(fù)賦值操作中被引用的對象的引用次數(shù)增加設(shè)定數(shù)值,同時將針對同一靜態(tài)對象前一次賦值操作中所引用的對象的引用次數(shù)減少設(shè)定數(shù)值。例如,若監(jiān)控到賦值操作,則將該賦值操作中被引用的對象的引用次數(shù)加1 ;若監(jiān)控到重復(fù)賦值操作,則將該重復(fù)賦值操作中被引用的對象的引用次數(shù)加1,同時將前一次賦值操作中被引用的對象的引用次數(shù)減1。又例如,a引用對象C,則對象c的引用次數(shù)為1 ;b引用對象d,則對象d的引用次數(shù)為1 ;若a又引用對象b,則a為重復(fù)賦值,則b對象的引用次數(shù)為1,同時將a上一次賦值操作時引用的對象c的引用次數(shù)減1,即c的引用次數(shù)變?yōu)?。在Java卡中,對源代碼進行編譯后形成的字節(jié)碼(bytecode)中,涉及到靜態(tài)對象的賦值操作的指令包括對象賦值指令(putStatiC_a指令)和成員變量賦值指令(putfield 指令)。putstaticj指令是給靜態(tài)對象賦值,putfield指令是給靜態(tài)對象的一個成員變量賦值。其中,在監(jiān)控到putfield指令時,根據(jù)被賦值的成員變量找到所述的類對象,進而判斷該類對象是否為靜態(tài)對象,若是則統(tǒng)計該對象的引用次數(shù)。例如,有如下一段源代碼
權(quán)利要求
1.一種Java卡中垃圾回收的方法,其特征在于,包括在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作;若根據(jù)所述賦值操作確定創(chuàng)建的對象未被靜態(tài)對象所引用,則將該未被靜態(tài)對象所引用的對象確定為垃圾對象;在函數(shù)執(zhí)行結(jié)束時,對Java卡中的垃圾對象進行回收。
2.如權(quán)利要求1所述的方法,其特征在于,在監(jiān)控到創(chuàng)建對象操作時,針對創(chuàng)建的對象設(shè)置引用次數(shù),并將引用次數(shù)設(shè)定為初始值;在監(jiān)控到對靜態(tài)對象的賦值操作時,統(tǒng)計所述靜態(tài)對象所引用的對象的引用次數(shù)。
3.如權(quán)利要求2所述的方法,其特征在于,統(tǒng)計所述靜態(tài)對象所引用的對象的引用次數(shù),包括若監(jiān)控到賦值操作,則將該賦值操作中被引用的對象的引用次數(shù)增加設(shè)定數(shù)值;若監(jiān)控到重復(fù)賦值操作,則將該重復(fù)賦值操作中被引用的對象的引用次數(shù)增加設(shè)定數(shù)值,同時將針對同一靜態(tài)對象前一次賦值操作中所引用的對象的引用次數(shù)減少設(shè)定數(shù)值。
4.如權(quán)利要求3所述的方法,其特征在于,將未被靜態(tài)對象所引用的對象確定為垃圾對象,包括統(tǒng)計所述靜態(tài)對象所引用的對象的引用次數(shù),將所述引用次數(shù)為初始值的對象確定為垃圾對象。
5.如權(quán)利要求1-4任一項所述的方法,其特征在于,對Java卡中的垃圾對象進行回收, 包括判斷確定的垃圾對象的個數(shù)是否達到設(shè)定閾值,若是,則對Java卡中確定的垃圾對象進行回收,否則,繼續(xù)執(zhí)行下一個函數(shù),直至累計的確定的垃圾對象的個數(shù)達到設(shè)定閾值時,對Java卡中確定的垃圾對象進行回收。
6.一種Java卡中垃圾回收的裝置,其特征在于,包括第一處理單元,用于在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作;第二處理單元,用于根據(jù)所述賦值操作確定創(chuàng)建的對象未被靜態(tài)對象所引用時,將該未被靜態(tài)對象所引用的對象確定為垃圾對象;第三處理單元,用于在函數(shù)執(zhí)行結(jié)束時,對Java卡中的垃圾對象進行回收。
7.如權(quán)利要求6所述的裝置,其特征在于,所述第一處理單元還用于,在監(jiān)控到創(chuàng)建對象操作時,針對創(chuàng)建的對象設(shè)置引用次數(shù),并將引用次數(shù)設(shè)定為初始值;所述第二處理單元還用于,在所述第一處理單元監(jiān)控到對靜態(tài)對象的賦值操作時,統(tǒng)計所述靜態(tài)對象所引用的對象的引用次數(shù)。
8.如權(quán)利要求7所述的裝置,其特征在于,所述第二處理單元用于統(tǒng)計所述靜態(tài)對象所引用的對象的引用次數(shù),具體為若所述第一處理單元監(jiān)控到賦值操作,則將該賦值操作中被引用的對象的引用次數(shù)增加設(shè)定數(shù)值;若所述第一處理單元監(jiān)控到重復(fù)賦值操作,則將該重復(fù)賦值操作中被引用的對象的引用次數(shù)增加設(shè)定數(shù)值,同時將針對同一靜態(tài)對象前一次賦值操作中所引用的對象的引用次數(shù)減少設(shè)定數(shù)值。
9.如權(quán)利要求8所述的裝置,其特征在于,所述第二處理單元用于將未被靜態(tài)對象所引用的對象確定為垃圾對象,具體為統(tǒng)計所述靜態(tài)對象所引用的對象的引用次數(shù),將所述引用次數(shù)為初始值的對象確定為垃圾對象。
10.如權(quán)利要求6-9任一項所述的裝置,其特征在于,所述第三處理單元用于對Java卡中的垃圾對象進行回收,具體為判斷所述第二處理單元確定的垃圾對象的個數(shù)是否達到設(shè)定閾值,若是,則對Java卡中確定的垃圾對象進行回收,否則,繼續(xù)執(zhí)行下一個函數(shù),直至累計的所述第二處理單元確定的垃圾對象的個數(shù)達到設(shè)定閾值時,對Java卡中確定的垃圾對象進行回收。
全文摘要
本發(fā)明公開了一種Java卡中垃圾回收的方法及裝置,用以Java卡主動進行垃圾回收,并且采用局部分階段垃圾回收的方式,使得垃圾回收操作分布在多個小的時間片內(nèi),避免了現(xiàn)有技術(shù)中一次性回收Java卡中的所有垃圾而占用過多時間的問題,提高了Java卡中垃圾回收的效率。該方法為在函數(shù)執(zhí)行過程中,監(jiān)控創(chuàng)建對象操作以及對靜態(tài)對象的賦值操作,若根據(jù)所述賦值操作確定創(chuàng)建的對象未被靜態(tài)對象所引用,則將該未被靜態(tài)對象所引用的對象確定為垃圾對象,在函數(shù)執(zhí)行結(jié)束時,對Java卡中的垃圾對象進行回收,本發(fā)明同時公開了一種Java卡中垃圾回收的裝置。
文檔編號G06F9/44GK102270134SQ20111022697
公開日2011年12月7日 申請日期2011年8月9日 優(yōu)先權(quán)日2011年8月9日
發(fā)明者宋浩 申請人:北京握奇數(shù)據(jù)系統(tǒng)有限公司