Garbage Collector - problemas  XML
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Autor Mensagem
CarlosEduardoDantas
GUJ Master
[Avatar]

Membro desde: 13/11/2006 15:26:38
Mensagens: 1089
Offline

Pessoal, bom dia,

Estou passando por um problema com o Garbage Collector. Ao entrar em uma tela que possui campos texto, ao digitar um texto e sair da tela, quando clico no Run GC conforme imagem em anexo, os objetos desta tela não são coletados, permanecendo referenciados na lista com os mesmos bytes de consumo. Porém, se eu entro na tela e saio sem digitar nenhum texto, os objetos da tela são coletados normalmente!

Alguém já passou por este problema ? Possuímos muitas telas e não podemos deixar os objetos assim na memória, depois de alguns minutos de uso, está gerando outofmemoryerror


grato
[Thumb - imagem.JPG]
 Nome do arquivo imagem.JPG [Disk] Download
 Descrição
 Tamanho 196 Kbytes
 Baixado:  31 vez(es)


'Nós somos o que repetidamente fazemos. Excelência, então, não é um ato, mas um hábito'.

Aristóteles.

carloseduardoxp
[MSN] [ICQ]
j0nny
GUJ Master
[Avatar]

Membro desde: 19/09/2009 00:01:57
Mensagens: 1121
Localização: Blumenau - SC
Offline

Como está sua estrutura de classes?

@jntsdaniel
github.com/jonatasdaniel

---

AndOrm - Framework ORM para Android
http://github.com/jonatasdaniel/andorm
[WWW]
CarlosEduardoDantas
GUJ Master
[Avatar]

Membro desde: 13/11/2006 15:26:38
Mensagens: 1089
Offline

Beleza cara?

obrigado por responder.. não vou postar toda a estrutura pois é desnecessário.. o problema está no trecho abaixo

a classe possui um textfield. Se eu digito algo no textfield, a classe continua para sempre na memória, mesmo saindo da tela.... se não uso o textfield, a classe é coletada pelo Garbage Collector assim que saio da tela... já tentei setar o textfield para null no evento de sair da tela, mas mesmo assim não funcionou




apenas para constar, esse componente é de um framework de terceiros, onde não possuímos o código.. o problema pode ser no framework, mas entramos em contato com o fornecedor e o mesmo alega que não.

This message was edited 3 times. Last update was at 21/10/2010 12:25:47


'Nós somos o que repetidamente fazemos. Excelência, então, não é um ato, mas um hábito'.

Aristóteles.

carloseduardoxp
[MSN] [ICQ]
rdsilio
JavaBaby
[Avatar]

Membro desde: 19/09/2007 09:22:19
Mensagens: 82
Localização: Curitiba-PR
Offline

Boa Tarde,

Não há como ter controle sobre o Garbage Collector, sendo que ao realizar um Run GC na verdade ocorre apenas uma solicitação ao VM, mas a limpeza será realizada apenas quando o algoritmo da Java VM determinar.
Quando se trabalha com String há certos elementos a considerar, como por exemplo o 'pool de Strings' gerado por Objetos da classe String, ao contrário do que ocorre com StringBuilder e StringBuffer. Não sei se há esse tipo de preocupação e se você tem acesso a isso no código, mas pode estar relacionado ao seu problema.

This message was edited 1 time. Last update was at 21/10/2010 12:28:11

CarlosEduardoDantas
GUJ Master
[Avatar]

Membro desde: 13/11/2006 15:26:38
Mensagens: 1089
Offline

rdsilio, ao chamar o Run GC, ele não vai obrigatoriamente coletar o lixo naquele instante, porém, mais cedo ou mais tarde recolherá caso o objeto seja um candidato. Já deixei a aplicação rodando por alguns minutos tentando sucessivas vezes e os objetos referente a esta tela não foram coletados...


sobre o pool de Strings, se eu seto null para o objeto assim que saio da tela, as Strings continuam no pool, porém, como o objeto perde a referência para a mesma, ele seria coletado não?



grato pela resposta

'Nós somos o que repetidamente fazemos. Excelência, então, não é um ato, mas um hábito'.

Aristóteles.

carloseduardoxp
[MSN] [ICQ]
rdsilio
JavaBaby
[Avatar]

Membro desde: 19/09/2007 09:22:19
Mensagens: 82
Localização: Curitiba-PR
Offline

CarlosEduardoDantas wrote:rdsilio, ao chamar o Run GC, ele não vai obrigatoriamente coletar o lixo naquele instante, porém, mais cedo ou mais tarde recolherá caso o objeto seja um candidato. Já deixei a aplicação rodando por alguns minutos tentando sucessivas vezes e os objetos referente a esta tela não foram coletados...


sobre o pool de Strings, se eu seto null para o objeto assim que saio da tela, as Strings continuam no pool, porém, como o objeto perde a referência para a mesma, ele seria coletado não?



grato pela resposta


Sobre o pool de String, ao setar null, embora a variável perca a referência, o objeto continua sendo mantido no pool para ser reaproveitado por outros objetos com o mesmo texto, e isso pode ser um problema dependendo da aplicação e do volume de modificações no conteúdo de uma variável do tipo String, pois a cada mudança no valor, um novo elemento é adicionado ao pool e a duração dele é gerenciada pela VM.
CarlosEduardoDantas
GUJ Master
[Avatar]

Membro desde: 13/11/2006 15:26:38
Mensagens: 1089
Offline

rdsilio wrote:
CarlosEduardoDantas wrote:rdsilio, ao chamar o Run GC, ele não vai obrigatoriamente coletar o lixo naquele instante, porém, mais cedo ou mais tarde recolherá caso o objeto seja um candidato. Já deixei a aplicação rodando por alguns minutos tentando sucessivas vezes e os objetos referente a esta tela não foram coletados...


sobre o pool de Strings, se eu seto null para o objeto assim que saio da tela, as Strings continuam no pool, porém, como o objeto perde a referência para a mesma, ele seria coletado não?



grato pela resposta


Sobre o pool de String, ao setar null, embora a variável perca a referência, o objeto continua sendo mantido no pool para ser reaproveitado por outros objetos com o mesmo texto, e isso pode ser um problema dependendo da aplicação e do volume de modificações no conteúdo de uma variável do tipo String, pois a cada mudança no valor, um novo elemento é adicionado ao pool e a duração dele é gerenciada pela VM.


Sim, a String que eu usei continua no pool, por exemplo, no código "Troca de Mercadoria" continuaria no pool, porém a instância da classe FrmEditarTrocaMercadoriasBasic (na verdade a instância da classe filha, já que essa é abstrata) deveria ser coletada.

Obrigado pela ajuda, mas o meu problema não é com as Strings, é com as instâncias das classes referente às telas.

This message was edited 1 time. Last update was at 21/10/2010 12:49:30


'Nós somos o que repetidamente fazemos. Excelência, então, não é um ato, mas um hábito'.

Aristóteles.

carloseduardoxp
[MSN] [ICQ]
 
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Ir para:   
Powered by JForum 2.1.8 © JForum Team