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