java.lang.OutOfMemoryError: Java heap space[resolvido]  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
CarlosEduardoDantas
GUJ Master
[Avatar]

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
[MSN] [ICQ]
juliocbq
GUJ Expert
[Avatar]

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
juliocbq
GUJ Expert
[Avatar]

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
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.
juliocbq
GUJ Expert
[Avatar]

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
ViniGodoy
Moderador
[Avatar]

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
[WWW]
CarlosEduardoDantas
GUJ Master
[Avatar]

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
[MSN] [ICQ]
juliocbq
GUJ Expert
[Avatar]

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
ViniGodoy
Moderador
[Avatar]

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
[WWW]
dm_thiago
JavaEvangelist
[Avatar]

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á.
juliocbq
GUJ Expert
[Avatar]

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
Bruno Laturner
GUJ Expert
[Avatar]

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
[WWW]
juliocbq
GUJ Expert
[Avatar]

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
juliocbq
GUJ Expert
[Avatar]

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
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Obrigado a todos pelos posts.

www.citrox.com.br
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team