2017-05-09 115 views
4

我寫了一個在磁盤上有19 KB大小的小程序。它有三個類。第一個是從Applet擴展的,第二個是靜態函數,第三個是我從applet創建實例的類。如何減小javacard applet的大小

我有三個問題:

  1. 有什麼辦法來找出多少大小在我的Java卡採取的是我的applet實例?
  2. 是否有任何工具可以減小javacard applet(.cap文件)的大小?
  3. 你能解釋一些規則來幫助我減少applet的大小嗎?

回答

6
  1. 有什麼辦法來找出多少大小在我的Java卡採取的是我的applet實例?
  • (據我所知)沒有做到這一點(在全球平臺/ Java卡)沒有正式的辦法。

  • 您可以根據applet加載前和安裝後的空閒內存差異(最有可能在個性化之後 - 因爲您可能會在個性化過程中創建一些對象)來估計真實內存使用情況。一些方法來找出可用內存信息是:

    • 使用JCSystem.getAvailableMemory()(見here),這也是信息的所有存儲器類型(如果實現的話)。

    • 使用擴展卡資源信息標籤檢索與GET DATA(見TS 102 226)(如果實現的話)。

    • 使用專有命令(詢問供應商)。

  • 你可以看看你的.cap文件中,並查看加載到卡各部分的尺寸 - 這一個肯定是非常不準確的卡OS是免費的處理在內容的自行決定。

  • 我記得JCOP工具有一些特殊的eclipse視圖,它顯示當前applet的各種統計信息 - 也可能是信息性的。

  • 參考實現提供了一個選項來獲得一些resource consumption statistics - 也許是有用的(雖然我從來沒有使用過這個)。

  • 是否有降低的Java卡小應用程序(的.cap文件)的大小的任何工具?
    • 我在過去使用ProGuard改善小程序的性能(這實際上增加了小程序的大小,因爲我用它主要是爲方法內聯) - 但它應該工作,以減少小應用程序的大小,以及(例如消除死碼 - 見shrinking options)。有很多不同的optimizations - 只是看看,但不要期待奇蹟。
  • 你能解釋一下幫我減輕我的小應用程序的大小規則?
    • 我想強調良好的設計和正確的代碼複用,但也有關於通用的優化技術,肯定很多資源 - 我不知道任何Java卡特定的 - 不能在這裏幫助:(

    • 如果您有加載到一張卡更小程序,你可以放置普通代碼共享庫。


    一些額外的(隨機)注:

    • 這可能是更實際的是拿到卡提供更大的存儲器。

    • 由卡片給出的可用內存信息可能不準確。

    • 我想知道您的applet大小有問題,因爲通常存在瞬態內存大小(AFAIK)問題。

    • 您的小應用程序可能只是簡單地泄漏內存,從而使用越來越多的內存。

    • 不要爲較小的applet大小犧牲安全性!

    祝你好運!

    +0

    非常感謝你,這是一個很好的答案。 –

    3

    要回答你的問題3

    3,可你解釋一下,幫我減輕我的小應用程序的大小規則?

    一些基本的準則是:

    1. 保存方法的最低數量,你知道我們有智能卡和方法調用的資源非常有限的開銷,從而以最小的方法調用,性能卡將增加。避免使用get/set方法。因爲大多數卡的堆棧大小約爲200字節,所以也應避免遞歸調用。

    2. 避免使用超過3個虛擬方法參數和4個靜態方法。這樣,編譯器將使用數字或字節碼快捷方式,從而減少代碼大小。

    3. 要處理臨時數據,可以使用APDU緩衝區或瞬態陣列,因爲在EEPROM上寫入比在RAM上寫入要慢大約1000倍。

    4. 繼承也是javacard中的開銷,特別是當層次結構複雜時。

    5. 訪問數組元素也是卡的開銷。因此,在重複訪問數組元素的情況下,嘗試將元素存儲在局部變量中並使用它。

    代替這樣做的:

    if (arr[index1] == 1) do this; 
    OR 
    if (arr[index1] == 2) do this; 
    OR 
    if (arr[index1] == 3) do this; 
    

    這樣做:

    temp = arr[index1]; 
    if (temp == 1) do this; 
    OR 
    if (temp == 2) do this; 
    OR 
    if (temp == 3) do this; 
    
  • 取代嵌套的if-else與等效開關語句switch語句執行速度更快,佔用內存更少。
  • +0

    謝謝Anmol。 –