首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javacard内存泄漏。

Javacard内存泄漏。
EN

Stack Overflow用户
提问于 2013-07-28 21:17:28
回答 4查看 650关注 0票数 1

我是Javacard编程的初学者,我已经使用javacard实现了一个小程序。

小程序在没有取消选择的情况下运行了3次,然后我在小程序返回的响应数据中收到了"0x6f00“。

这是内存泄漏吗?

EN

回答 4

Stack Overflow用户

发布于 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运行时……

票数 1
EN

Stack Overflow用户

发布于 2015-04-29 18:07:40

小程序在没有取消选择的情况下运行了3次,然后我在小程序返回的响应数据中收到了"0x6f00“。

  • 它应该是从javacard OS/JCVM

返回的响应数据

这是内存泄漏吗?

可能是

  • 。我的建议是不要在重复的过程中初始化任何变量,比如process(APDU apdu)方法。例如:

公共类ExampleClass扩展小程序{公共byte[] b1;公共byte[] b2;...公共无效进程(APDU apdu){ b2 =新byte5;X}}

以上是不鼓励的,因为每次您的小程序使用process()处理传入的APDU时,javacard操作系统必须在卡闪存中创建一个字节数组,这样会非常快地耗尽它。最佳实践是在小程序实例化中初始化变量,比如在构造函数中。

票数 1
EN

Stack Overflow用户

发布于 2013-07-31 19:45:47

行为是可重复的吗?如果是,请尝试检查您的代码,确保除了构造函数之外没有new关键字。通过创建和使用称为"workBuffer“的公共缓冲区来重用变量,和/或使用全局内存缓冲区,如APDU缓冲区。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17908619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档