下面,您将看到关于对象删除管理的应用程序编程说明Java Card 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();
}
}
问题是:
当我在JCSystem.requestObjectDeletion();
表达式中调用if
时,如何识别哪个缓冲区或 oldBuffer 对象必须删除?
答案 0 :(得分:2)
通常在启动期间执行对象删除。所以基本上系统可以像普通的Java垃圾收集器那样扫描内存。
如果未找到特定对象的引用,则可以收集该对象占用的空间。由于此时oldBuffer
引用超出范围,因此不会引用旧数组。确切的内存管理取决于实现。