Javacard - 垃圾收集期间的电力损失
Javacard - power loss during garbage collection
我注意到我的智能卡(带有 Omnikey 5121 的 NXP J2E145、J3A081、J3C145 reader)出现一些非常奇怪的行为:调用 JavaCard 方法后立即断电
JCSystem.requestObjectDeletion()
可能会损坏卡:在大约 10% 的此类断电之后,ATR 命令非常慢(1000 毫秒)并且我对任何其他 APDU(小程序选择、卡管理器身份验证等)没有任何响应。
我知道 requestObjectDeletion() 的行为取决于供应商特定的实现,所以我的问题很广泛而且开放...
是否在单个事务中处理垃圾收集"usually"?
是否有任何 "official" 建议不要在可能断电的情况下调用 requestObjectDeletion()?
您对 NXP 的卡片有类似的体验吗?
编辑:
- JCSystem.isObjectDeletionSupported() == 在我所有的智能卡上都是真的。
当尝试连接到损坏卡片的卡片管理器小程序时,Eclipse IDE 中的 JCOP shell 报告:
ATR:3BFB9600008131FE454F4450204D41502053414D3E
ATR:
T = 1
jcshell:终端的未知问题。
最后一个终端错误:由于 I/O 设备错误,无法执行请求。
我认为这可能是一个实现错误。一般来说,智能卡上不需要也不使用垃圾回收。
您应该通过良好的小程序设计在任何情况下避免垃圾收集。这样你就永远不会 运行 陷入内存问题。小程序通常在其生命周期内只安装一次,并且应该在卡的剩余生命周期内可用。
对于正常用例,垃圾收集通常需要很长时间。也许这就是为什么 Java Card 或底层系统库的程序员不希望它发生在安全环境之外的原因。
我注意到我的智能卡(带有 Omnikey 5121 的 NXP J2E145、J3A081、J3C145 reader)出现一些非常奇怪的行为:调用 JavaCard 方法后立即断电
JCSystem.requestObjectDeletion()
可能会损坏卡:在大约 10% 的此类断电之后,ATR 命令非常慢(1000 毫秒)并且我对任何其他 APDU(小程序选择、卡管理器身份验证等)没有任何响应。
我知道 requestObjectDeletion() 的行为取决于供应商特定的实现,所以我的问题很广泛而且开放...
是否在单个事务中处理垃圾收集"usually"?
是否有任何 "official" 建议不要在可能断电的情况下调用 requestObjectDeletion()?
您对 NXP 的卡片有类似的体验吗?
编辑:
- JCSystem.isObjectDeletionSupported() == 在我所有的智能卡上都是真的。
当尝试连接到损坏卡片的卡片管理器小程序时,Eclipse IDE 中的 JCOP shell 报告:
ATR:3BFB9600008131FE454F4450204D41502053414D3E
ATR: T = 1
jcshell:终端的未知问题。 最后一个终端错误:由于 I/O 设备错误,无法执行请求。
我认为这可能是一个实现错误。一般来说,智能卡上不需要也不使用垃圾回收。
您应该通过良好的小程序设计在任何情况下避免垃圾收集。这样你就永远不会 运行 陷入内存问题。小程序通常在其生命周期内只安装一次,并且应该在卡的剩余生命周期内可用。
对于正常用例,垃圾收集通常需要很长时间。也许这就是为什么 Java Card 或底层系统库的程序员不希望它发生在安全环境之外的原因。