javacards 中的对象删除管理
Object Deletion Management in javacards
下面,你看应用编程笔记Java卡片3平台经典版关于对象删除管理的一部分:
void updateBuffer(byte requiredSize)
{
try
{
if(buffer != null && buffer.length == requiredSize)
{
//we already have a buffer of required size
return;
}
JCSystem.beginTransaction();
byte[] oldBuffer = buffer;
buffer = new byte[requiredSize];
if (oldBuffer != null)
JCSystem.requestObjectDeletion();
JCSystem.commitTransaction();
}
catch(Exception e)
{
JCSystem.abortTransaction();
}
}
问题是:
当我在 if
表达式中调用 JCSystem.requestObjectDeletion();
时,它如何识别 buffer 或 oldBuffer 对象必须被删除?
对象删除通常在启动期间执行。所以基本上系统可以像当时的普通Java垃圾收集器一样清理内存。
如果没有找到对特定对象的引用,则可以收集该对象占用的space。由于 oldBuffer
引用 超出范围 到那时将没有对旧数组的引用。确切的内存管理取决于实现。
下面,你看应用编程笔记Java卡片3平台经典版关于对象删除管理的一部分:
void updateBuffer(byte requiredSize)
{
try
{
if(buffer != null && buffer.length == requiredSize)
{
//we already have a buffer of required size
return;
}
JCSystem.beginTransaction();
byte[] oldBuffer = buffer;
buffer = new byte[requiredSize];
if (oldBuffer != null)
JCSystem.requestObjectDeletion();
JCSystem.commitTransaction();
}
catch(Exception e)
{
JCSystem.abortTransaction();
}
}
问题是:
当我在 if
表达式中调用 JCSystem.requestObjectDeletion();
时,它如何识别 buffer 或 oldBuffer 对象必须被删除?
对象删除通常在启动期间执行。所以基本上系统可以像当时的普通Java垃圾收集器一样清理内存。
如果没有找到对特定对象的引用,则可以收集该对象占用的space。由于 oldBuffer
引用 超出范围 到那时将没有对旧数组的引用。确切的内存管理取决于实现。