Assunto: Sim! Você também pode conseguir algo parecido no java! Basta você querer!
Você pode ler este artigo na íntegra http://www.guj.com.br/java.artigo.106.1.guj
Por favor, coloque os seus comentários sobre este artigo aqui.
Assunto: Sim! Você também pode conseguir algo parecido no java! Basta você querer!
Você pode ler este artigo na íntegra http://www.guj.com.br/java.artigo.106.1.guj
Por favor, coloque os seus comentários sobre este artigo aqui.
Entao, mas no 1.o exemplo (pilha implementada com um vetor de objetos), mesmo havendo um memory leak, não é um memory leak tao grave assim. Imagine a situação:
ok, tds os objetos ainda estao com referencias validas, mas assim que a pilha começar a ser usada de novo, os objetos antigos terao suas referencias perdidas e serao removidos com o garbage collector!
Ou seja, se sua pilha for de tamanho 100, vc terá no maximo um leak de 100 objetos e que nunca serah maior que isso! E se vc fez uma pilha com esse tamanho, eh pq vc planejou o programa para rodar bem mesmo qdo a pilha estiver cheia!
Ahuaha… falei demais, mas resumindo td… depois q vc enche a pilha uma vez, ela passa a ocupar sempre os 100 objetos na memoria, mesmo que vc tenha chamado pop ateh esvazia-la! Mas tb o leak nunca será maior q isso! E conforme a pilha enche de novo, os objetos antigos vao sendo “naturalmente desalocados”…
sim
devia ter deixado isso mais claro
mas voce tem muitos aplicativos que variam muito o tamanho da pilha! mudancas gigantescas
entao se voce usou uma vez com 10000, e ai passou a usar em media 20, ja era! um abraco!
e imagine que voce tem VARIAS pilhas! e voce tem esse tipo de erro em VARIOS lugares! esse fine tuning em java eh importante, e ele eh facil! entao nao devemos descosiderar!
Sim eh verdade nao devemos desconsiderar…
concordo, mas o artigo mostra um possivel erro de programação, e não um erro do GC, o GC diz que elimina da memoria tudo o que não for mais acessivel ao programa, e em todos os exemplos do artigo, as variaveis continuavam acessiveis ao programa.
caso aquela posição do “Stack” fosse utilizada novamente o objeto antigo seria liberado da memoria
ou então se existisse um prev ou algo assim para incrementar novamente a variavel, os objetos seriam acessados novamente
se alguem achar que isto é realmente um erro do GC, para corrigilo, basta colocar uma interface de adivinhação nele para ele saber que você ainda guarda uma referencia para a variavel, mas você não quer mais utiliza-la 
Mas vale lembrar que memory leak eh de fato erro de programacao.
Rafael
com certeza 
coloquei o reply hoje pois passei uma meia hora mais ou menos provando para um amigo meu fanatico por .NET e fervoroso odiador do Java que o artigo não se tratava de um erro do GC e sim de como evitar um provavel erro de programação
no final ele concordou comigo, mas ele mandou a mesma mensagem para um monte de gente dizendo que o artigo se tratava de um BUG no GC do Java, o que não é verdade 
Ué paulo,
o médoto pop da classe StackSimplerrima está errado e vc apresenta a correção logo em seguida.
pop() está retornando uma referência a um objeto da pilha sem retirá-la de lá. Errado para o método pop() de manipulação de pilhas, mas de acordo com as regras da linguagem ( objetos são passados por referência ).
Alias, na pilha só existem referências. Se outra parte do código estiver usando uma das referências de uma pilha que vc acabou de destruir, o GC não fará nada com esta referência e vc continuará usando normalmente.
Este tema de referências a objetos é muito legal e gostaria que as pessoas que acreditam que este comentário está errado, não tivessem pena apontar erros.
Atenciosamente,
Não ficou claro,
“este comentário está errado” se refere ao meu comentário e não o do paulo.
Atenciosamente,