2017-05-09 54 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。 –