Java 卡本地固定大小数组可变内存存储位置
Java Card Local Fixed-Size Array Variable Memory Storage Location
我想知道是否有人知道 temp
数组存储在以下 Java 卡片方法中的确切位置(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);
...
}
此外,在Java Card Applet Developer's Guide中,您可以找到:
The Converter ensures that memory is allocated for the contents of static fields, namely, primitive data types
and references to arrays. Memory is allocated for instances by using the new bytecode from the system heap
and cannot be reclaimed (unless the smart card implements a garbage collector). Memory for method
variables, locals, and parameters is allocated from the stack and is reclaimed when the method returns.
这部分WalletDemoApplet
肯定不能生成在局部变量中:
byte temp[]={0x00,0x00,0x00,0x00};
那是EEPROM存储; new byte[]
部分可能被隐藏,但数组创建仍在执行,as specified by the JLS:
An array initializer creates an array and provides initial values for all its components.
这里的数组初始值设定项是大括号和其中的任何内容。
请至少忽略示例的那一部分。通常,您会为此使用静态方法,并使用带有 makeTransientByteArray
的 class 字段(在 Applet 实例化期间调用)作为缓冲区。也就是说:如果您需要一个数组,只需定义 4 个字节的变量,或者 - 在这种情况下 - 直接设置字节值也可以。
任何数组都将在 EEPROM
中创建,而不是在 makeTransientByteArray
中创建。您可以在 JCIDE
工具中检查可用和消耗的内存。
在此示例中,当调用此方法时,内存将在 EEPROM
中一次又一次地分配。
我想知道是否有人知道 temp
数组存储在以下 Java 卡片方法中的确切位置(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);
...
}
此外,在Java Card Applet Developer's Guide中,您可以找到:
The Converter ensures that memory is allocated for the contents of static fields, namely, primitive data types and references to arrays. Memory is allocated for instances by using the new bytecode from the system heap and cannot be reclaimed (unless the smart card implements a garbage collector). Memory for method variables, locals, and parameters is allocated from the stack and is reclaimed when the method returns.
这部分WalletDemoApplet
肯定不能生成在局部变量中:
byte temp[]={0x00,0x00,0x00,0x00};
那是EEPROM存储; new byte[]
部分可能被隐藏,但数组创建仍在执行,as specified by the JLS:
An array initializer creates an array and provides initial values for all its components.
这里的数组初始值设定项是大括号和其中的任何内容。
请至少忽略示例的那一部分。通常,您会为此使用静态方法,并使用带有 makeTransientByteArray
的 class 字段(在 Applet 实例化期间调用)作为缓冲区。也就是说:如果您需要一个数组,只需定义 4 个字节的变量,或者 - 在这种情况下 - 直接设置字节值也可以。
任何数组都将在 EEPROM
中创建,而不是在 makeTransientByteArray
中创建。您可以在 JCIDE
工具中检查可用和消耗的内存。
在此示例中,当调用此方法时,内存将在 EEPROM
中一次又一次地分配。