| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2010 09:21:20
|
CarlosEduardoDantas
GUJ Master
![[Avatar]](/images/avatar/dc33e31c39c141adff52d67a0718b867.jpg)
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
|
| Nome do arquivo |
imagem.JPG |
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2010 11:23:28
|
j0nny
GUJ Master
![[Avatar]](/images/avatar/2f37ce1ace06a770fab4452db0fe5c5f.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2010 12:13:40
|
CarlosEduardoDantas
GUJ Master
![[Avatar]](/images/avatar/dc33e31c39c141adff52d67a0718b867.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2010 12:26:55
|
rdsilio
JavaBaby
![[Avatar]](/images/avatar/53fa2bb31e7b9c5afebcd5bc6212c09d.png)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2010 12:31:42
|
CarlosEduardoDantas
GUJ Master
![[Avatar]](/images/avatar/dc33e31c39c141adff52d67a0718b867.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2010 12:41:20
|
rdsilio
JavaBaby
![[Avatar]](/images/avatar/53fa2bb31e7b9c5afebcd5bc6212c09d.png)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2010 12:49:02
|
CarlosEduardoDantas
GUJ Master
![[Avatar]](/images/avatar/dc33e31c39c141adff52d67a0718b867.jpg)
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 |
|
|
 |
|
|
|
|