開始之前,您必須先完成練習 1.3:分析洩漏候選項。
現在您知道第二個佇列是發生洩漏的佇列。讓我們再看看程式碼來尋找問題。
若要開啟第二個佇列的程式碼並修正記憶體洩漏:
public class SecondaryQueue { private Vector myQ; private int currentPos; public SecondaryQueue(){ myQ = new Vector(); currentPos=0; } public void add(Object obj){ myQ.add(obj); } public Object getNext(){ // 先進先出。 // 只取得物件一次, // currentPos 追蹤移除的最後一個項目。 if(myQ.size()>currentPos){ currentPos++; return myQ.get(currentPos-1); } } }
public class SecondaryQueue { private Vector myQ; private int currentPos; public SecondaryQueue(){ myQ = new Vector(); currentPos=0; } public void add(Object obj){ myQ.add(obj); } public Object getNext(){ if(myQ.size()>0){ return myQ.remove(0); } return null; } }
在主功能表中,按一下檔案 > 儲存來儲存您的變更。
現在再一次側寫應用程式,依照之前的方法來擷取資料堆傾出。當您分析洩漏時,「洩漏候選項」視圖會告訴您「分析洩漏未產生任何的洩漏候選項」。您已修正第二個佇列中的洩漏,「洩漏候選項」演算法未發現任何其他的洩漏。
請檢視摘要中的資料來完成這個指導教學。