2015-02-10 21 views
0

以下對象刪除管理,你看應用程序的一部分,說明Java卡3平臺的經典版有關對象刪除管理:在javacards

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對象必須刪除?

回答

2

對象刪除通常在啓動過程中執行。所以基本上,系統可以像當時普通的Java垃圾收集器一樣掃描內存。

如果未找到特定對象的引用,則可以收集該對象佔用的空間。由於oldBuffer參考超出範圍屆時將不會引用舊的數組。確切的內存管理取決於實現。

+0

只是爲了確定我得到的觀點:你的意思是:在'byte [] oldBuffer = buffer'行''我創建一個變量名_oldBuffer_引用_Buffer_。在下一行'buffer = new byte [requiredSize];'我改變了_Buffer_的引用,因此_oldBuffer_變成了一個沒有任何引用的變量。所以在下一行中,if的條件爲真(即'oldBuffer = null'),並且ObjectDeletion刪除它。對? – Jean 2015-02-14 07:28:32

+0

是的,沒錯。 – 2015-02-14 13:39:47