Pode ser que esteja alocando mais memória que o necessário em algum ponto.
V
ViniGodoy
Imagens, para serem manipuladas, devem ser descompactadas na memória. Por padrão, é o que o BufferedImage faz. Então, uma imagem, pode sim, ficar muito grande depois de aberta.
Em todo caso, seria bom usar o Visual VM para ver se a causa é realmente essa, ou se sua aplicação não está fazendo alguma caca. https://visualvm.dev.java.net/
Use também o parâmetro da VM:
-XX:HeapDumpOnOutOfMemoryError
Para gerar um dump da sua memória antes do erro ocorrer. Esse dump pode ser aberto e analisado no Visual VM.
J
jonathanprogrammer
A idéia principal é que ela abre em +/- 240 mb…
Teria como ela não abrir em memória e sim apenas ser uma visualização dela ?
Um jeito de que ela não alocasse esses 240mb e sim apenas os 80 default do java?
Se eu pegar e adicionar os -Xmx512mb digamos, a aplicação roda normal, mas deixa ela usando 240 mb da memória não é nada util!!
Hehe
Se alguém souber uma resolução mais agradavel fora alocar mais memória?!
Valeu desde já,
Jonathan Souza Santos
J
juliocbq
Pode postar a imagem que está querendo carregar?
J
juliocbq
jonathanprogrammer:
A idéia principal é que ela abre em +/- 240 mb…
Teria como ela não abrir em memória e sim apenas ser uma visualização dela ?
Um jeito de que ela não alocasse esses 240mb e sim apenas os 80 default do java?
Se eu pegar e adicionar os -Xmx512mb digamos, a aplicação roda normal, mas deixa ela usando 240 mb da memória não é nada util!!
Hehe
Se alguém souber uma resolução mais agradavel fora alocar mais memória?!
Valeu desde já,
Jonathan Souza Santos
Tudo que você vê no monitor está carregado na ram convecional ou na ram da sua placa de vídeo.
A pilha do windows suporta 8 megas. Se você empilhou uma imagem maior que isso no heap já está errado.
E
entanglement
Alguns tipos de imagens são em “tiles” (como o TIFF) e permitem que você edite apenas uma “tile” dela, ou seja, uma porção, não a imagem completa, para evitar esse tipo de problema (gastar uma quantidade excessiva de memória).
Veja os métodos do JAI.
J
jonathanprogrammer
juliocbq:
Tudo que você vê no monitor está carregado na ram convecional ou na ram da sua placa de vídeo.
A pilha do windows suporta 8 megas. Se você empilhou uma imagem maior que isso no heap já está errado.
A imagem é de 1mb mais ou menos, o programa não carrega mais de 2mb de imagem…
O problema é que ta sendo ocupado 240mb de ram pra executar a imagem! e com isso fica pesado o programa.
Gostaria apenas visualizar a imagem, sem usar 240mb…
J
jonathanprogrammer
entanglement:
Alguns tipos de imagens são em “tiles” (como o TIFF) e permitem que você edite apenas uma “tile” dela, ou seja, uma porção, não a imagem completa, para evitar esse tipo de problema (gastar uma quantidade excessiva de memória).
Veja os métodos do JAI.
Na real a edição eu deixaria mais pra frente, a necessidade principal é abri um imagem e visualizar ela sem ocupar 240mb de memoria…
J
juliocbq
jonathanprogrammer:
entanglement:
Alguns tipos de imagens são em “tiles” (como o TIFF) e permitem que você edite apenas uma “tile” dela, ou seja, uma porção, não a imagem completa, para evitar esse tipo de problema (gastar uma quantidade excessiva de memória).
Veja os métodos do JAI.
Na real a edição eu deixaria mais pra frente, a necessidade principal é abri um imagem e visualizar ela sem ocupar 240mb de memoria…
Posta a imagem e o código pra vermos.
E
entanglement
Dica: use um programa (como o ImageMagick, que tem interfaces em Java para você usar) que pegue a tal imagem e a converta para uma imagem menor, que você possa carregar sem estourar sua memória.
J
juliocbq
Para carregar uma imagem em algum formato de compressão, vc precisa decodifica-la, e da mesma forma vai ocupar memoria.
Sem ver o código não dá para ajudar.
J
jonathanprogrammer
Hmm…
o código não adianta eu te postar, senão vo posta muitas linhas :roll:
Mais se tu poder me dar uma referência teorica onde eu possa aplicar o que vocês estão me falando, fora as API que já mencionaram!
Valeu,
E
entanglement
É assim.
Digamos que você queira editar uma imagem gerada por uma câmera digital de 12 megapixels, ou seja, essa imagem deve ocupar 12 * 1000000 * 4 bytes = 48 Megabytes em memória se você usar 32 bits por pixel (o que não é tão impossível assim - vários formatos usam exatamente esse layout).
Normalmente você não carrega a imagem inteira na memória FÍSICA, e sim cria uma espécie de “memória virtual” onde só uma subimagem dessa imagem total é que fica presente na memória.
Para fazer esse tipo de coisas, você precisa de uma biblioteca poderosa, normalmente fornecida por terceiros e que costuma funcionar melhor com outras linguagens, não Java.
Se você, em vez disso, quiser fazer tudo isso do zero e sem pagar um tostão, precisa pelo menos usar uma biblioteca como a JAI - a Java ImageIO não é suficiente para o que você quer. No FAQ do JAI eles indicam o que fazer com imagens grandes.
o código não adianta eu te postar, senão vo posta muitas linhas :roll:
Logo abaixo da caixa de textos onde você escreve a resposta, tem a opção “Attachments”. Isso significa “anexos”.
J
jonathanprogrammer
ViniGodoy:
jonathanprogrammer:
o código não adianta eu te postar, senão vo posta muitas linhas :roll:
Logo abaixo da caixa de textos onde você escreve a resposta, tem a opção “Attachments”. Isso significa “anexos”.
O problema é que é muitas interfaces e classes envolvidas, dai é uma mão posta tudo, e o projeto é da empresa.
J
juliocbq
jonathanprogrammer:
Hmm…
o código não adianta eu te postar, senão vo posta muitas linhas :roll:
Mais se tu poder me dar uma referência teorica onde eu possa aplicar o que vocês estão me falando, fora as API que já mencionaram!
Valeu,
O seu código está errado. Eu processo imagens de 8 mb/px usando filtros complexos em menos de 1s com java. E uma imagem de 8mbpx possui mais de 2000px de largura e altura.
J
juliocbq
jonathanprogrammer:
ViniGodoy:
jonathanprogrammer:
o código não adianta eu te postar, senão vo posta muitas linhas :roll:
Logo abaixo da caixa de textos onde você escreve a resposta, tem a opção “Attachments”. Isso significa “anexos”.
O problema é que é muitas interfaces e classes envolvidas, dai é uma mão posta tudo, e o projeto é da empresa.
Posta somente o código que carrega a imagem, bixo. Tô careca de mexer com isso no meu trabalho. Vc não vai estar me dando nada.
J
juliocbq
fui…
J
jonathanprogrammer
Não é questão de tu roubar ou não nada, entrei hoje na empresa, e ja me mandaram ver isso, não manjo bem de manipulação de images…
E se verem que eu to mandando código da empresa… sla… meio chato bixo…
E tu não tem nenhum exemplo ai pra me mandar pra ver?!