始める前に、『演習 1.3: リーク候補の分析』を完了する必要があります。
2 次キューがリークしているキューだということが分かりました。ソース・コードを見て問題を検出します。
2 次キューのソースを開いてメモリー・リークを修正するには以下を行います。
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(){ // 先入先出 (FIFO)。 // オブジェクトを 1 度正しく取得し、 // 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; } }
メインメニューから「ファイル」>「保管」を選択して、変更を保管します。
前回と同様にヒープ・ダンプを取得して、アプリケーションのプロファイルを作成します。 リークを分析すると、「リーク候補」ビューに「リーク分析の結果、リーク候補は見つかりませんでした」と表示されます。2 次キューのリークは修正され、リーク候補アルゴリズムによって追加のリークは検出されませんでした。
『要約』に記載されている資料を確認してチュートリアルを完了します。