我正在开发一个 Java Card 小程序(用于 Java Card 2.2.1),它需要一些临时对象来处理 APDU 命令。我对正确的内存管理有疑问。我花了很多时间研究这些问题,但在某些 Java 卡 API 上没有找到任何说明或好的示例代码。我有两个主要问题:
如何创建一个瞬态对象数组(我的意思是 RAM 中的自定义对象而不是 EEPROM)。我已经读过,makeTransientObjectArray但它只返回 Object 类型的数组。例如,我知道如何使用 来创建瞬态字节数组makeTransientByteArray,但我的问题是关于对象实例的瞬态数组。或者可以用java语言以任何方式将字节数组转换为没有序列化的实例?
我只在传入 APDU 命令的过程中需要这个临时对象数组,而不需要保留为我分配的内存。分配这个临时内存的最佳位置在哪里(在install, select, process, ... 函数内)?
编辑以获取更多解释:
正如我已经从文档中读到的,任何对象实例都存储在 EEPROM 中。假设我知道在我的过程算法中需要的最大对象数(比如 100)。我在 install 方法中生成了 100 个 MyClass 实例。MyClass 的每个实例包含 3 个字段:field1 是一个短类型,field2 是一个字节,field3 是一个短类型。所有这 100 个实例都将通过输入 APDU 命令来填充。如果对于每个命令,我都在 EEPROM 上填充对象,这不是一个好习惯,因为它们是临时数据。EEPROM 也有一个最大的写入周期。一种方法可能是,对于每个实例,我使用makeTransientByteArray和为每个对象分配 5 个字节makeTransientShortArray。但正如我从文档中读到的,它按集群(32 字节 - 不确定大小)分配内存,这是无效的。那么在这种情况下我必须做什么?
我的意思是如何处理瞬态记忆。如果在安装函数内部分配临时内存,则其他小程序将无法使用它。如果小程序是卡上唯一的小程序,则在install函数中分配所有瞬态内存是一种很好的做法。我想知道一种适用于所有条件(单小程序设备或多小程序设备)的通用有效方法。此外,我不确定,如果在内部分配了瞬态内存install,只要将卡插入读卡器,就可以在进程函数内部使用。