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(); 时,它如何识别 bufferoldBuffer 对象必须被删除?

对象删除通常在启动期间执行。所以基本上系统可以像当时的普通Java垃圾收集器一样清理内存。

如果没有找到对特定对象的引用,则可以收集该对象占用的space。由于 oldBuffer 引用 超出范围 到那时将没有对旧数组的引用。确切的内存管理取决于实现。