Vazamento de memória com Java?  XML
Índice dos Fóruns » Artigos e Tutoriais
Autor Mensagem
Administrador
Java Eldar

Membro desde: 02/08/2002 12:27:02
Mensagens: 0
Offline

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.

This message was edited 1 time. Last update was at 19/07/2005 21:40:01

[Email]
FLC
JavaGuru

Membro desde: 15/08/2002 15:30:08
Mensagens: 212
Localização: São Paulo
Offline

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:

1. vc enche a pilha....
2. vc esvazia a pilha....

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"...
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4203
Localização: São Paulo
Offline

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!

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
FLC
JavaGuru

Membro desde: 15/08/2002 15:30:08
Mensagens: 212
Localização: São Paulo
Offline

Sim eh verdade nao devemos desconsiderar....
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

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

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

Mas vale lembrar que memory leak eh de fato erro de programacao.

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

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

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
marcoc
Entusiasta Java

Membro desde: 10/12/2002 19:41:34
Mensagens: 15
Offline

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,

Marco Aurélio Costa
[Email]
marcoc
Entusiasta Java

Membro desde: 10/12/2002 19:41:34
Mensagens: 15
Offline

Não ficou claro,

"este comentário está errado" se refere ao meu comentário e não o do paulo.

Atenciosamente,

Marco Aurélio Costa
[Email]
 
Índice dos Fóruns » Artigos e Tutoriais
Ir para:   
Powered by JForum 2.1.8 © JForum Team