Antes de começar, você deve concluir o Exercício 1.3: Analisando os candidatos à fuga.
Agora você sabe que a fila secundária está na fila de fugas. Vamos olhar no código fonte para localizar o problema.
Para abrir a origem da fila secundária e corrigir a fuga de memória:
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; } }
No menu principal, selecione Arquivo > Salvar para salvar as alterações.
Agora crie o perfil do aplicativo novamente, capturando dumps de heap exatamente como antes. Ao analisar por fugas, a visualização Candidatos à Fuga informa que "A Análise de Fuga não resultou em nenhum candidato à fuga." Você corrigiu a fuga na fila secundária e o algoritmo de Candidatos à Fuga não localizou fugas adicionais.
Conclua este tutorial revisando os materiais no Sumário.