Esse post tem como fonte original o livro "Effective Java" - second edition de Joshua Bloch.
Quando entramos no mundo do Java temos a sensação que não devemos nos preocupar com o recolhimento de memória, pois, existe o Garbage Collector. Contudo, isso não é bem verdade. Veja o código do link abaixo:
Stack
A classe stack é muito conhecida pelos programadores e pergunto, você seria capaz de identificar um memory leak (vazamento de memória)?
Quando damos um pop na pilha ele decrementa o size do array dando a impressão de que o objeto foi removido. Contudo, ele ainda está lá e nem é elegível ao Garbage Collector. Apesar do size truncar o tamanho da pilha o objeto ainda existe na memória. Se você fizer size++; ele ainda estará lá e você conseguirá acessa-lo.
Então, para remover essa referência obsoleta faça:
public Object pop() {
if (size == 0) {
throw new EmptySizeException();
}
Object result = elements[--size];
elements[size] = null;
return result;
}
Vale lembrar que isso não garante o recolhimento do objeto, veja o código abaixo:
Stack st;
...
Object ob = st.pop();
...
Apesar, da pilha destruir a referência ao objeto que é retornado do método pop, uma nova referência é criada para ele. Contudo, ainda vale apena aterrar a referência dentro do array.
Passed in SCBCD 5 exam
Há 14 anos
2 comentários:
Caião...
saudades do cê rapaz!!
tah na CPM Braxis entao?? q legal..
acho q o Zeh ea Ki suco foram para ai tb!!
eu sei q devia postar sobre o código...mas como eu nao entendo nada...posto minhas saudades q eh melhor..hahaauaua
abraçao...e continua escrevendo q qq dia eu entendo..prometo!!
Grande Nana!!
Então, esses dias eu encontrei o Zeh aqui!
Abração e saudades tb!!
Postar um comentário