始める前に、実習 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(){ // First In First Out. // Get an object exactly once, // currentPos keeps track of last item removed. 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; } }
メインメニューから、「ファイル」>「保管」を順にクリックして変更を保存します。
アプリケーションのプロファイルを再度作成して、以前と同様にヒープ・ダンプをキャプチャーします。 リークを分析すると、「リーク分析によるリーク候補は見つかりませんでした (Leak Analysis did not result in any leak candidates)」という通知が「リーク候補 (Leak Candidates)」ビューに表示されます。セカンダリー・キューに存在していたリークが修正され、「リーク候補 (Leak Candidates)」のアルゴリズムでは追加のリークは検出されませんでした。
要約の記事を検討して、このチュートリアルを終了します。