我写了一个在磁盘上有19 KB大小的小程序。它有三个类。第一个是从Applet扩展的,第二个是静态函数,第三个是我从applet创建实例的类。如何减小javacard applet的大小
我有三个问题:
- 有什么办法来找出多少大小在我的Java卡采取的是我的applet实例?
- 是否有任何工具可以减小javacard applet(.cap文件)的大小?
- 你能解释一些规则来帮助我减少applet的大小吗?
我写了一个在磁盘上有19 KB大小的小程序。它有三个类。第一个是从Applet扩展的,第二个是静态函数,第三个是我从applet创建实例的类。如何减小javacard applet的大小
我有三个问题:
- 有什么办法来找出多少大小在我的Java卡采取的是我的applet实例?
(据我所知)没有做到这一点(在全球平台/ Java卡)没有正式的办法。
您可以根据applet加载前和安装后的空闲内存差异(最有可能在个性化之后 - 因为您可能会在个性化过程中创建一些对象)来估计真实内存使用情况。一些方法来找出可用内存信息是:
使用JCSystem.getAvailableMemory()
(见here),这也是信息的所有存储器类型(如果实现的话)。
使用扩展卡资源信息标签检索与GET DATA
(见TS 102 226)(如果实现的话)。
使用专有命令(询问供应商)。
你可以看看你的.cap
文件中,并查看加载到卡各部分的尺寸 - 这一个肯定是非常不准确的卡OS是免费的处理在内容的自行决定。
我记得JCOP工具有一些特殊的eclipse视图,它显示当前applet的各种统计信息 - 也可能是信息性的。
参考实现提供了一个选项来获得一些resource consumption statistics - 也许是有用的(虽然我从来没有使用过这个)。
- 是否有降低的Java卡小应用程序(的.cap文件)的大小的任何工具?
- 你能解释一下帮我减轻我的小应用程序的大小规则?
我想强调良好的设计和正确的代码复用,但也有关于通用的优化技术,肯定很多资源 - 我不知道任何Java卡特定的 - 不能在这里帮助:(
如果您有加载到一张卡更小程序,你可以放置普通代码共享库。
一些额外的(随机)注:
这可能是更实际的是拿到卡提供更大的存储器。
由卡片给出的可用内存信息可能不准确。
我想知道您的applet大小有问题,因为通常存在瞬态内存大小(AFAIK)问题。
您的小应用程序可能只是简单地泄漏内存,从而使用越来越多的内存。
不要为较小的applet大小牺牲安全性!
祝你好运!
要回答你的问题3
3,可你解释一下,帮我减轻我的小应用程序的大小规则?
一些基本的准则是:
保存方法的最低数量,你知道我们有智能卡和方法调用的资源非常有限的开销,从而以最小的方法调用,性能卡将增加。避免使用get/set方法。因为大多数卡的堆栈大小约为200字节,所以也应避免递归调用。
避免使用超过3个虚拟方法参数和4个静态方法。这样,编译器将使用数字或字节码快捷方式,从而减少代码大小。
要处理临时数据,可以使用APDU缓冲区或瞬态阵列,因为在EEPROM上写入比在RAM上写入要慢大约1000倍。
继承也是javacard中的开销,特别是当层次结构复杂时。
访问数组元素也是卡的开销。因此,在重复访问数组元素的情况下,尝试将元素存储在局部变量中并使用它。
代替这样做的:
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;
谢谢Anmol。 –
非常感谢你,这是一个很好的答案。 –