| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 08:59:11
|
CarlosEduardoDantas
GUJ Master
![[Avatar]](/images/avatar/dc33e31c39c141adff52d67a0718b867.jpg)
Membro desde: 13/11/2006 15:26:38
Mensagens: 1089
Offline
|
ViniGodoy wrote:Heheheh, pois é. Mas ele é muito confiável. Se as imagens estão ficando presas, é porque algo as referencia.
Vini, só para constar. Eu não questionei a confiabilidade do coletor, mas conheço o processo e sei que ele não vai coletar algo que você não descarta. Isto é falha do sistema.
This message was edited 2 times. Last update was at 07/10/2009 09:02:30
|
'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) 07/10/2009 08:59:27
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
Olha como funciona:
Para guardar a imagem no banco de dados, uso o codificador base64 e a transformo em string. A imagem fica pequena como string.
Depois faço o caminho inverso:
Vou tentar desalocar esse objeto, e testar novamente no profiler.
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 09:01:30
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
CarlosEduardoDantas wrote:
ViniGodoy wrote:Heheheh, pois é. Mas ele é muito confiável. Se as imagens estão ficando presas, é porque algo as referencia.
Vini, só para constar. Eu não questionei a confiabilidade do coletor, mas conheço o processo e sei que ele não vai coletar algo que você não descarta. Isto é falha do sistema.
Pode me explicar como descartar o objeto BufferedImage? O que vou tentar fazer agora, é passar null pera ele, assim não terá mais referência na memória, e o coletor deverá fazer a coleta.
This message was edited 1 time. Last update was at 07/10/2009 09:02:14
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 09:03:36
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Image.flush
Javadoc wrote:
Image objects created by the Toolkit and Component classes which are loaded from files, URLs or produced by an ImageProducer are unloaded and all local resources are released. These objects can later be reloaded from their original source as needed when they are rendered, just as when they were first created.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 09:06:22
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
Isso mesmo. Tem aqui na documentação. Vou deixar rodando aqui e ver se estoura até as 12:00 hs.
This message was edited 1 time. Last update was at 07/10/2009 09:07:53
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 09:10:47
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
As documentações do Java 2D tem recomendado usar o ImageIO.read para carregar um BufferedImage, e não mais o Toolkit. A gerência do BufferedImage costuma a ser mais eficiente (pelo menos é o que dizem, nunca rodei nada para testar, mas não tem pq desconfiar da própria Sun).
This message was edited 1 time. Last update was at 07/10/2009 09:11:09
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 09:14:12
|
CarlosEduardoDantas
GUJ Master
![[Avatar]](/images/avatar/dc33e31c39c141adff52d67a0718b867.jpg)
Membro desde: 13/11/2006 15:26:38
Mensagens: 1089
Offline
|
juliocbq wrote:
CarlosEduardoDantas wrote:
ViniGodoy wrote:Heheheh, pois é. Mas ele é muito confiável.
Se as imagens estão ficando presas, é porque algo as referencia.
Vini, só para constar. Eu não questionei a confiabilidade do coletor, mas conheço o processo e sei que ele não vai coletar algo que você não descarta. Isto é falha do sistema.
Pode me explicar como descartar o objeto BufferedImage?
O que vou tentar fazer agora, é passar null pera ele, assim não terá mais referência na memória, e o coletor deverá fazer a coleta.
eu não tinha visto teu código acima.. mas tenta usar o que o colega abaixo postou e nos notifique dos resultados
boa sorte
|
'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) 07/10/2009 09:16:14
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
CarlosEduardoDantas wrote:
juliocbq wrote:
CarlosEduardoDantas wrote:
ViniGodoy wrote:Heheheh, pois é. Mas ele é muito confiável.
Se as imagens estão ficando presas, é porque algo as referencia.
Vini, só para constar. Eu não questionei a confiabilidade do coletor, mas conheço o processo e sei que ele não vai coletar algo que você não descarta. Isto é falha do sistema.
Pode me explicar como descartar o objeto BufferedImage?
O que vou tentar fazer agora, é passar null pera ele, assim não terá mais referência na memória, e o coletor deverá fazer a coleta.
eu não tinha visto teu código acima.. mas tenta usar o que o colega abaixo postou e nos notifique dos resultados
boa sorte
estou constantemente online. Daqui a pouco posto os resultados do teste.
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 09:50:51
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
juliocbq wrote:Pode me explicar como descartar o objeto BufferedImage? O que vou tentar fazer agora, é passar null pera ele, assim não terá mais referência na memória, e o coletor deverá fazer a coleta.
Vai passar null para quem? Geralmente, são poucas vezes que você deve fazer = null explicitamente. Exceto se você tiver guardado imagens num vetor, ou em atributos que não sairão de escopo. Mas não parece ser o seu caso...
This message was edited 1 time. Last update was at 07/10/2009 09:53:19
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 09:58:54
|
dm_thiago
JavaEvangelist
![[Avatar]](/images/avatar/a829b6def307bd357011e57e5d6a635d.png)
Membro desde: 14/02/2007 04:23:55
Mensagens: 305
Offline
|
Me lembro que no livro Effective Java, o autor falava sobre esse tipo de problema. Se eu não me engano, o exemplo dele era uma lista que ele guardava objetos, mas usava uma variavel inteira para apontar o final da lista. Então o problema era que, quando se removia elementos, a variavel regredia o valor, mas não era exluído da lista, ou seja, o objeto sempre tinha referencias e nunca era recolhido pelo GC (é melhor olhar o livro porque eu não lembro muito bem não hehehe). Você podia ver se não tem algum problema parecido no seu código, onde a referencia a seus objetos são guardados em algum lugar e são esquecidos lá.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 09:58:59
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
ViniGodoy wrote:
juliocbq wrote:Pode me explicar como descartar o objeto BufferedImage?
O que vou tentar fazer agora, é passar null pera ele, assim não terá mais referência na memória, e o coletor deverá fazer a coleta.
Vai passar null para quem?
Geralmente, são poucas vezes que você deve fazer = null explicitamente. Exceto se você tiver guardado imagens num vetor, ou em atributos que não sairão de escopo. Mas não parece ser o seu caso...
Normalmente, passar null para um objeto faz com que o coletor de lixo o enxergue. Eu usei o metodo flush, no final de cada decodificação, e deixei o software rodando. Vamos ver se vai estourar o heap.
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 10:08:12
|
Bruno Laturner
GUJ Expert
![[Avatar]](/images/avatar/5800ccd9514fd789d08e5831951aa6bc.jpg)
Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline
|
Outra idéia para usar referências é usar as classes de java.lang.ref, e trabalhar com seus vários níveis de referências.
As referências mais fracas são usadas para objetos que você gostaria que estivessem em memória, mas podem ser recolhidos caso o sistema precisar de memória.
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2009 14:54:37
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
O estouro voltou a acontecer, mas dessa vez não foi dentro de BufferedImage. Recebi apenas essa exceção. Vou tentar otimizar o código ao máximo, de acordo com as idéias do vinnie. Utilizarei o profile, e trocarei toolkit por ImageIO
Deixarei o software rodando a noite, e amanhã terei mais novidades.
Obrigado a todos pela ajuda...
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/10/2009 10:54:02
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
Que dureza pessoal. O problema do heap eu consegui resolver. Mas o software agora congela por causa do coletor de lixo algumas vezes.
Alguém ae sabe como consigo liberar da memória de um vetor de bytes?
byte[].
|
www.citrox.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2009 13:47:42
|
juliocbq
GUJ Expert
![[Avatar]](/images/avatar/153704bb24a28e9a6bb49e8ffde1492e.jpg)
Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline
|
Obrigado a todos pelos posts.
|
www.citrox.com.br |
|
|
 |
|
|