[java-list] Problema para liberar memória-com os arquivos
Oi pessoal. Após mtas noites mal dormidas, parece que chegamos ao centro do problema. Nosso software recebe dados (mtos dados !!) de um banco e aparentemente esses dados estão superlotando o sistema. Parece que a cada vez que os dados são recebidos, a query anterior fica retida no sistema, ou seja, uma referência para o objeto recebido é mantida, o que faz com que o garbage collector não retire o obj. Estou mandando um 'demo' do problema. Preciso entender porque o objeto fica retido na memória e como posso tirá-lo. Nesta situação, o garbage collector não está sendo eficiente ... obs: no demo : - writeObjs.java: cria um arquivo q vai ser lido por readObj.java - tem que rodar uma vez para criar o arquivo. - readObjs.java: é o 'pepino' . é rodar e ver o efeito Ambos os arquivos tem alguns comentários. Eles são simples e servem para ver que o consumo de memória aumenta. Conto com a ajuda de vcs. Obrigado. MYI __ Do You Yahoo!? Thousands of Stores. Millions of Products. All in one Place. http://shopping.yahoo.com/ writeObjs.java readObjs.java -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] Problema para liberar memória.
Em cada iteracao você realmente precisa criar um novo objeto vector ? O que deve estar sobrecarregando a memoria é isto... ps.: O System.gc() não garante que vai ser chamado o Garbage Collector, na realidade ele "sugere" Luiz Fernando Corrêa _ [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] - Original Message - From: Marcos Ibuki <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]> Sent: Friday, October 20, 2000 9:08 PM Subject: [java-list] Problema para liberar memória. > > Oi pessoal. > > Estou com um problema de performance. Por exemplo, > declaro uma variável desta forma: > > for (int i=0;i Vector vect = new Vector(); > ... > vect = null; > ... > } > Aparentemente esta área do programa está gerando um > consumo muito alto de memória, uma vez que "max" > interações acontecem e "vect" é um vetor com muitas > posições (muitas mesmo). > > Eu pensei (e ainda penso) que atribuindo "null" à > variável ocorria uma liberação da memória alocada para > aquela variável, de forma que o garbage collector se > encarregaria do resto. > > Mesmo forçando o garbage collector com System.gc(); > o consumo de memória continuou a aumentar, a cada vez > que o código acima era executado > > Alguém poderia por favor me esclarecer esta questão? > > Obrigado. > > Marcos Yoshiaki Ibuki > > __ > Do You Yahoo!? > Yahoo! Messenger - Talk while you surf! It's FREE. > http://im.yahoo.com/ > > -- LISTA SOUJAVA > http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP > dúvidas mais comuns: http://www.soujava.org.br/faq.htm > regras da lista: http://www.soujava.org.br/regras.htm > para sair da lista: envie email para [EMAIL PROTECTED] > - -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] Problema para liberar memória.
Talvez a declaracao dentro de i dentro do for seja uma das causas. Declare i fora do for, que talvez fique um pouco mais rapido. Gilleanes. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
[java-list] Problema para liberar memória.
Oi pessoal. Estou com um problema de performance. Por exemplo, declaro uma variável desta forma: for (int i=0;ihttp://im.yahoo.com/ -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
RE: [java-list] Problema para liberar memória.
Marcos, Em primeiro lugar, lembre-se que System.gc() nao forca o garbage collector, e sim o "induz" a ser executado. Teoricamente, o trecho de codigo esta' correto, no entanto voce pode torna-lo mais eficiente: 1. Voce esta' inicializando o vector com o tamanho padrao. Isso e' caro, pois ele vai ter que se redimensionar dinamicamente para suprir o espaco requerido pelo seu laco. Tente inicializar o vector com aproximadamente o tamanho de elementos a serem armazenados (i.e. numero de iteracoes do laco, sei la'...). 2. Em vez de apontar o vector para null, utilize o metodo vect.removeAllElements(), que apaga os elementos e mantem o tamanho atual do mesmo. Lembre-se que criacao de objetos e' uma tarefa muito cara em java. 3. Para otimizar mais ainda, instancie o vetor fora do laco for, apenas uma vez, e fique limpando o mesmo a cada fim de iteracao. OK ? O que deve estar ocorrendo e' que o garbage collector nao deve estar tendo tempo para se executar, uma vez que se outro processo esta' sendo executado com mais prioridade, o mesmo nao o interrompera'. Para se assegurar que o garbage collector esta' trabalhando, utilize o parametro -verbosegc na execucao do seu programa. Espero ter ajudado. []'s Rogerio > -Original Message- > From: Marcos Ibuki [mailto:[EMAIL PROTECTED]] > Sent: sexta-feira, 20 de outubro de 2000 20:08 > To: [EMAIL PROTECTED]; [EMAIL PROTECTED] > Subject: [java-list] Problema para liberar memsria. > > > > Oi pessoal. > > Estou com um problema de performance. Por exemplo, > declaro uma variavel desta forma: > > for (int i=0;i Vector vect = new Vector(); > ... > vect = null; > ... > } > Aparentemente esta area do programa esta gerando um > consumo muito alto de memsria, uma vez que "max" > interagues acontecem e "vect" i um vetor com muitas > posigues (muitas mesmo). > > Eu pensei (e ainda penso) que atribuindo "null" ` > variavel ocorria uma liberagco da memsria alocada para > aquela variavel, de forma que o garbage collector se > encarregaria do resto. > > Mesmo forgando o garbage collector com System.gc(); > o consumo de memsria continuou a aumentar, a cada vez > que o csdigo acima era executado > > Alguim poderia por favor me esclarecer esta questco? > > Obrigado. > > Marcos Yoshiaki Ibuki > > __ > Do You Yahoo!? > Yahoo! Messenger - Talk while you surf! It's FREE. > http://im.yahoo.com/ > > -- LISTA SOUJAVA > http://www.soujava.org.br - Sociedade de Usuarios Java da Sucesu-SP > dzvidas mais comuns: http://www.soujava.org.br/faq.htm > regras da lista: http://www.soujava.org.br/regras.htm > para sair da lista: envie email para [EMAIL PROTECTED] > - > -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -