Smartcard Java卡本地固定大小阵列可变内存存储位置
我想知道是否有人知道在下面的Java卡方法中,Smartcard Java卡本地固定大小阵列可变内存存储位置,smartcard,javacard,Smartcard,Javacard,我想知道是否有人知道在下面的Java卡方法中,temp数组存储在哪里(EEPROM或RAM)(我在JCIDE示例目录中找到的WalletDemoApplet的部分源代码)。请注意,数组不是通过makeTransientByteArray分配的。它也被声明为方法内部的局部变量 private void calIntegral(byte [] buf,byte soff,short len) { byte temp[]={0x00,0x00,0x00,0x00}; short low
temp
数组存储在哪里(EEPROM或RAM)(我在JCIDE示例目录中找到的WalletDemoApplet的部分源代码)。请注意,数组不是通过makeTransientByteArray分配的。它也被声明为方法内部的局部变量
private void calIntegral(byte [] buf,byte soff,short len)
{
byte temp[]={0x00,0x00,0x00,0x00};
short low=0;
byte aa=0;
if (len==2)
Util.arrayCopy(buf, soff, temp,(short)2, len);
else
Util.arrayCopy(buf, soff, temp,(short)0, len);
...
}
此外,在中,您可以找到:
转换器确保为静态字段(即基本数据类型)的内容分配内存
以及对数组的引用。通过使用系统堆中的新字节码为实例分配内存
并且不能回收(除非智能卡实现垃圾收集器)。方法记忆
变量、局部变量和参数从堆栈中分配,并在方法返回时回收
WalletDemoApplet的这一部分肯定不应该在局部变量中生成:
byte temp[]={0x00,0x00,0x00,0x00};
这就是EEPROM存储器;新字节[]
部分可能被隐藏,但仍在执行数组创建:
数组初始值设定项创建数组并为其所有组件提供初始值
这里的数组初始值设定项是大括号和其中的任何内容
请至少忽略示例的这一部分。通常,您会使用静态方法,并使用带有
makeTransientByteArray
(在小程序实例化期间调用)的类字段作为缓冲区。也就是说:如果您需要一个数组,只需定义4个字节变量,或者(在本例中)直接设置字节值就可以了。任何数组都将在EEPROM
中创建,而不是使用MakeTranientByteArray
创建。您可以在JCIDE
工具中检查可用和消耗的内存。
在本例中,调用此方法时,将在
EEPROM
中一次又一次分配内存。正如我们所说,JavaCardOS的好人正在观看演示;可能还有其他错误(我发送了一个到Q/a的链接)。。。