我是Javacard编程的初学者,我已经使用javacard实现了一个小程序。
小程序在没有取消选择的情况下运行了3次,然后我在小程序返回的响应数据中收到了"0x6f00“。
这是内存泄漏吗?
发布于 2013-07-29 04:08:10
当然,这可能是内存泄漏。但如果没有额外的知识,就很难确定。它似乎确实与applet中的状态有关,否则您就不会有这样的行为。但这并不一定意味着内存泄漏。“跑”三次似乎并不多。
在process
方法的末尾出现的任何未捕获的异常都将生成6F00
。此规则的惟一例外是ISOException
,它将转换为由ISOException
实例中的reason表示的状态字。而且,由于JavaCard中的任何异常实际上都是一个RuntimeException
,因此很容易无法正确处理这些异常。
但这很容易确定。在process
方法中创建一个try
/catch
,捕获SystemException
并检查原因代码是SystemException.NO_RESOURCE
还是SystemException.NO_TRANSIENT_SPACE
。然后使用ISOException.throwIt(MY_OUT_OF_MEMORY_STATUS_WORD)
。这相当于或多或少地使用System.out
,当然也可以使用调试器,前提是调试器可用于Java Card运行时……
发布于 2015-04-29 18:07:40
小程序在没有取消选择的情况下运行了3次,然后我在小程序返回的响应数据中收到了"0x6f00“。
返回的响应数据
这是内存泄漏吗?
可能是
公共类ExampleClass扩展小程序{公共byte[] b1;公共byte[] b2;...公共无效进程(APDU apdu){ b2 =新byte5;X}}
以上是不鼓励的,因为每次您的小程序使用process()处理传入的APDU时,javacard操作系统必须在卡闪存中创建一个字节数组,这样会非常快地耗尽它。最佳实践是在小程序实例化中初始化变量,比如在构造函数中。
发布于 2013-07-31 19:45:47
行为是可重复的吗?如果是,请尝试检查您的代码,确保除了构造函数之外没有new
关键字。通过创建和使用称为"workBuffer“的公共缓冲区来重用变量,和/或使用全局内存缓冲区,如APDU缓冲区。
https://stackoverflow.com/questions/17908619
复制相似问题