java卡虛擬機(jī)的優(yōu)化方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及智能卡技術(shù)領(lǐng)域,特別涉及一種java卡虛擬機(jī)的優(yōu)化方法及系統(tǒng)。
【背景技術(shù)】
[0002] Java卡是Sun微系統(tǒng)為智能卡開發(fā)平臺而制定的一個開放的標(biāo)準(zhǔn)。使用Java卡平 臺創(chuàng)建的智能卡上存有Java applet (Application縮寫)。在卡發(fā)行后也可以把a(bǔ)pplet加到 卡上或修改卡上已有的applet。它們把數(shù)據(jù)存儲在一個集成的微處理器芯片里,然后 applet被下載到微處理器的非易失存儲器里,由Java虛擬機(jī)來運(yùn)行。
[0003] Java卡充分利用了 Java語言的平臺無關(guān)性,使得"一次編寫,到處運(yùn)行"的Java思 想在智能卡上得以實(shí)現(xiàn)。相對于普通智能卡,Java卡有著平臺無關(guān)性,--^多用和重用,靈 活性,安全性等特點(diǎn)。
[0004] 但制約Java卡發(fā)展的一個很重要的方面問題其較低的執(zhí)行效率,造成這種低效的 原因除了受限于智能卡的硬件資源和Java語言的字節(jié)碼解釋執(zhí)行機(jī)制,更主要的原因是 JCVM( Java卡虛擬機(jī))的應(yīng)用存儲結(jié)構(gòu)和相關(guān)的機(jī)制嚴(yán)重影響到Java卡虛擬機(jī)的執(zhí)行性能。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的旨在至少解決所述技術(shù)缺陷之一。
[0006] 為此,本發(fā)明的目的在于提出一種java卡虛擬機(jī)的優(yōu)化方法及系統(tǒng),提高了 java 卡的運(yùn)行效率,在不改變硬件設(shè)備的情況下,有效提升了 java卡虛擬機(jī)的運(yùn)行效率。
[0007] 為了實(shí)現(xiàn)上述目的,本發(fā)明的實(shí)施例提供一種java卡虛擬機(jī)的優(yōu)化方法,包括如 下步驟:
[0008] 步驟S1,下載java卡應(yīng)用程序,該java卡應(yīng)用程序?yàn)橐粋€cap包,其中,所述cap包 中包括有多個用于虛擬機(jī)解析執(zhí)行的組件component,以及用來索引所述component組件的 常量池組件constant pool,所述常量池組件constant_pool包括對內(nèi)部和外部應(yīng)用操作數(shù) 據(jù)的索引;
[0009] 步驟S2,在java卡應(yīng)用程序的下載過程中,通過對所述cap包中的常量池組件 C〇nstant_p〇〇l進(jìn)行遍歷,以獲取對組件的外部引用關(guān)系,作為引用信息,再通過預(yù)操作獲 取所述引用信息所對應(yīng)的目標(biāo)信息;
[0010] 步驟S3,將引用信息所相應(yīng)的目標(biāo)信息以擴(kuò)展的類型結(jié)構(gòu)回填到所述常量池組件 constant_pool 中;
[0011] 步驟S4, java卡應(yīng)用程序解釋器在運(yùn)行態(tài)可以直接在所述常量池組件constant_ pool中通過修改后的結(jié)構(gòu)索引到目標(biāo)信息。
[0012]進(jìn)一步,在所述步驟S2中,所述引用信息包括:目標(biāo)cap包引用信息、目標(biāo)cap包的 類、方法、屬性引用信息。
[0013] 進(jìn)一步,在所述步驟S3中,
[0014] (1)當(dāng)所述外部引用關(guān)系為方法信息時,將目標(biāo)cap包引用信息、目標(biāo)cap包的方法 偏移量回填到cons tan t_pool;
[0015] ⑵外部引用關(guān)系為屬性信息時,將目標(biāo)cap包的對象引用信息、目標(biāo)cap包關(guān)聯(lián)靜 態(tài)對象的屬性在靜態(tài)對象中的偏移量回填到cons tan t_pool;
[0016] (3)外部引用關(guān)系為類信息時,將目標(biāo)cap包引用信息、目標(biāo)cap包的類信息的偏移 ^[hI j4|i|J cons tan t_pool 0
[0017]根據(jù)本發(fā)明實(shí)施例的java卡虛擬機(jī)的優(yōu)化方法,可以省去java卡應(yīng)用程序在運(yùn)行 時為定位目標(biāo)進(jìn)行的大量內(nèi)部跳轉(zhuǎn)以及外部遍歷等性能低下問題,直接定位到目標(biāo)信息, 提高了 java卡的運(yùn)行效率,在不改變硬件設(shè)備的情況下,有效提升了 java卡虛擬機(jī)的運(yùn)行 效率。
[0018] 本發(fā)明實(shí)施例還提出一種java卡虛擬機(jī)的優(yōu)化系統(tǒng),包括:下載模塊,用于下載 java卡應(yīng)用程序,該java卡應(yīng)用程序?yàn)橐粋€cap包,其中,所述cap包中包括有多個用于虛擬 機(jī)解析執(zhí)行的組件component,以及用來索引所述component組件的常量池組件constant pool,所述常量池組件constant_pool包括對內(nèi)部和外部應(yīng)用操作數(shù)據(jù)的索引;遍歷模塊, 所述遍歷模塊與所述下載模塊相連,用于在所述下載模塊下載java卡應(yīng)用程序的過程中, 通過對所述cap包中的常量池組件constant_pool進(jìn)行遍歷,以獲取對組件的外部引用關(guān) 系,作為引用信息;預(yù)操作模塊,所述預(yù)操作模塊與所述遍歷模塊相連,用于通過預(yù)操作獲 取所述引用信息所對應(yīng)的目標(biāo)信息;回填模塊,所述回填模塊與所述預(yù)操作模塊相連,用于 將引用信息所相應(yīng)的目標(biāo)信息以擴(kuò)展的類型結(jié)構(gòu)回填到所述常量池組件c 〇nstant_p〇〇l 中,則java卡應(yīng)用程序解釋器在運(yùn)行態(tài)可以直接在所述常量池組件constant_pool中通過 修改后的結(jié)構(gòu)索引到目標(biāo)信息。
[0019] 進(jìn)一步,所述引用信息包括:目標(biāo)cap包引用信息、目標(biāo)cap包的類、方法、屬性引用 信息。
[0020] 進(jìn)一步,(1)當(dāng)所述外部引用關(guān)系為方法信息時,所述回填模塊將目標(biāo)cap包引用 信息、目標(biāo)cap包的方法偏移量回填到constant_pool;
[0021] (2)外部引用關(guān)系為屬性信息時,所述回填模塊將目標(biāo)cap包的對象引用信息、目 標(biāo)cap包關(guān)聯(lián)靜態(tài)對象的屬性在靜態(tài)對象中的偏移量回填到constant_pool;
[0022] (3)外部引用關(guān)系為類信息時,所述回填模塊將目標(biāo)cap包引用信息、目標(biāo)cap包的 類信息的偏移量回填到constant_pool。
[0023] 根據(jù)本發(fā)明實(shí)施例的java卡虛擬機(jī)的優(yōu)化系統(tǒng),可以省去java卡應(yīng)用程序在運(yùn)行 時為定位目標(biāo)進(jìn)行的大量內(nèi)部跳轉(zhuǎn)以及外部遍歷等性能低下問題,直接定位到目標(biāo)信息, 提高了 java卡的運(yùn)行效率,在不改變硬件設(shè)備的情況下,有效提升了 java卡虛擬機(jī)的運(yùn)行 效率。
[0024] 本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變 得明顯,或通過本發(fā)明的實(shí)踐了解到。
【附圖說明】
[0025] 本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對實(shí)施例的描述中將變得 明顯和容易理解,其中:
[0026] 圖1為根據(jù)本發(fā)明實(shí)施例的java卡虛擬機(jī)的優(yōu)化方法的流程圖;
[0027] 圖2為根據(jù)本發(fā)明實(shí)施例的java卡虛擬機(jī)的優(yōu)化系統(tǒng)的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0028] 下面詳細(xì)描述本發(fā)明的實(shí)施例,實(shí)施例的示例在附圖中示出,其中自始至終相同 或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描 述的實(shí)施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
[0029] 本發(fā)明提供一種java卡虛擬機(jī)的優(yōu)化方法及系統(tǒng),在應(yīng)用下載的過程中對需要查 詢引用操作的import數(shù)據(jù)、class數(shù)據(jù)、field數(shù)據(jù)和static method數(shù)據(jù)進(jìn)行預(yù)判和定位, 并修改應(yīng)用內(nèi)容和結(jié)構(gòu)為對以上數(shù)據(jù)的直接引用。本發(fā)明基于Java卡對象的生命周期特點(diǎn) 對Java虛擬機(jī)進(jìn)行優(yōu)化以滿足Java卡業(yè)務(wù)對效率的要求,達(dá)到在執(zhí)行過程中減少查詢、遍 歷和跳轉(zhuǎn)等操作,進(jìn)而提高Java卡虛擬機(jī)的解析和運(yùn)行效率。
[0030] 如圖1所示,本發(fā)明實(shí)施例的java卡虛擬機(jī)的優(yōu)化方法,包括如下步驟:
[0031 ] 步驟S1,下載java卡應(yīng)用程序,該java卡應(yīng)用程序?yàn)橐粋€cap包。
[0032]具體地,每個java卡應(yīng)用程序均是以cap包為單位,即一個java卡應(yīng)用程序就是一 個cap包。每個cap包中包括有多個用于虛擬機(jī)解析執(zhí)行的組件component,以及用來索引 component組件的常量池組件constant pool。常量池組件constant_pool包括對內(nèi)部和外 部應(yīng)用操作數(shù)據(jù)的索引。
[0033]例如,在java卡內(nèi)使用可實(shí)現(xiàn)空間動態(tài)管理的數(shù)據(jù)結(jié)構(gòu),堆(Heap)來管理可編程 存儲器,所有包和對象都存儲在Heap中。其中,用來索引Heap中單元的引用定義為HEAPREF, 指向Heap中包類型數(shù)據(jù)的HEAPREF定義為CAPREF,指向Heap中對象類型數(shù)據(jù)的HEAPREF定義 為0BJREF,類引用CLAREF采用CAPREF和cap內(nèi)部偏移索引類信息,方法引用MSTREF采用 CAPREF和cap內(nèi)部偏移索引類信息。每個對象都包含多個屬性,每個屬性都要占用一定存儲 空間,某一具體屬性在對象空間的內(nèi)部偏移定義為FLD0FF。常量池用來存儲常量信息。 [0034] 步驟S2,在java卡應(yīng)用程序的下載過程中,通過對cap包中的常量池組件 C〇nstant_p〇〇l進(jìn)行遍歷,以獲取對組件的外部引用關(guān)系,作為引用信息,再通過預(yù)操作獲 取引用信息所對應(yīng)的目標(biāo)信息。
[0035]在本發(fā)明的一個實(shí)施例中,引用信息包括:目標(biāo)cap包引用信息、目標(biāo)cap包的類