在开始之前,必须已完成练习 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; } }
从主菜单中,单击文件 > 保存以保存更改。
现在再次概要分析应用程序,和以前一样捕获堆转储。 分析泄漏时,“疑似泄漏对象”视图告诉您“泄漏分析没有发现任何疑似泄漏对象。” 您已在第二级队列中修正泄漏,并且“疑似泄漏对象”算法没发现任何其它泄漏。
复习总结中的资料,完成教程。