如何减小javacard applet的大小

Moh*_*ani 4 applet smartcard javacard globalplatform

我写了一个在磁盘上有19 KB大小的applet.它有三个类.第一个是从Applet扩展的,第二个是静态函数,第三个是我在applet中创建实例的类.

我有三个问题:

  1. 有没有办法找出我的javacard中的applet实例占用了多少大小?
  2. 有没有减少javacard applet(.cap文件)大小的工具?
  3. 你能解释一下帮助我减少applet大小的规则吗?

vlp*_*vlp 6

  1. 有没有办法找出我的javacard中的applet实例占用了多少大小?
  • (AFAIK)没有正式的方法(在GlobalPlatform/Java Card中).

  • 您可以根据applet加载之前和安装之后的可用内存差异来估计实际内存使用量(最有可能在个性化之后 - 因为您可能会在个性化期间创建一些对象).找到空闲内存信息的一些方法是:

    • 使用JCSystem.getAvailableMemory()(参见此处)提供所有内存类型的信息(如果已实现).

    • 使用可检索的扩展卡资源信息标签GET DATA(参见TS 102 226)(如果已实施).

    • 使用专有命令(询问供应商).

  • 您可以查看.cap文件内部并查看加载到卡中的部件的大小 - 这个肯定非常不准确,因为卡操作系统可以自由决定处理内容.

  • 我记得JCOP Tools有一些特殊的eclipse视图,它显示了当前applet的各种统计信息 - 也可能是提供信息的.

  • 参考实现提供了获取一些资源消耗统计数据的选项- 也可能是有用的(尽管我从未使用过它).

  1. 有没有减少javacard applet(.cap文件)大小的工具?
  • 我过去使用ProGuard来提高applet性能(实际上增加了applet大小,因为我主要使用它来进行方法内联) - 但它也应该可以减少applet的大小(例如,消除死代码 - 请参阅缩小选项) .还有许多不同的优化 - 只是看看,但不要指望奇迹.
  1. 你能解释一下帮助我减少applet大小的规则吗?
  • 我会强调良好的设计和正确的代码重用,但肯定有很多关于通用优化技术的资源 - 我不知道任何Java卡特定的 - 在这里无法帮助:(

  • 如果您将更多小程序加载到单个卡中,则可以将公共代码放入共享库中.


一些额外的(随机)笔记:

  • 获得具有更大内存的卡可能更实际.

  • 卡提供的可用内存信息可能不准确.

  • 我想知道你的applet大小有问题,因为通常存在瞬态内存大小(AFAIK)的问题.

  • 您的applet可能只是泄漏内存,因此使用越来越多的内存.

  • 不要为较小的applet大小牺牲安全性!

祝好运!