Smartcard 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

我想知道是否有人知道在下面的Java卡方法中,
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的链接)。。。