Seguinte, tenho que fazer um trabalho na faculdade de leitura de arquivos BMP. Fiz tudo a leitura dos bytes dos arquivos e exibos eles no jpanel sem problemas, ou seja, funciona.
Uso jinternalFrame pra exibir cada imagem numa subjanela dentro da minha aplicação, funcionando também sem problemas.
Mas se eu abro uma imagem bem grande e pesada(BMP é um arquivo de imagem sem compressão), o consumo de memória vai nas alturas.
Ok, isso já era esperado.
A questão é que se eu abro uma imagem, carrego ela bonito, exibo, fecho a janela(mato o objeto) e forço a execução do garbage collector e o consumo de memória continua usado como a imagem estivesse carregada ainda. Aí abrindo umas 3 imagens grandes, da o estouro da pilha…
O que eu faço para ele limpar???
Outra coisa, meio básico, qual a melhor maneira de fechar uma janela? Eu vi que o dispose() só oculta a janela na visualização. Tem algum método que mata a janela?
é, você não consegue forçar a execução do Garbage Collector, você apenas sugere a execução, e a JVM que decide se executa ou não, mas pelo que você está descrevendo, você provavelmente ainda tem referências à essa imagem quando fecha a janela.
Só dar setVisible(false) ou dispose() não retira a janela da memória.
Para ela sair da memória, você terá que eliminar todas as referências à janela (deixa-las null), para só então rodar o gargabe collector.
Então, certifique-se de estar removendo a janela de dentro do DesktopPane, e deixando null qualquer variável que aponte para a janela.
Olá, então a exibição que se faz é pintando pixel a pixel um jpanel… Eu ja desaloquei minhas estruturas na hora que eu dou o comando pra fechar a jInternalFrame(variavel =null), dou null no objeto que referencia a jInternalFrame e mandava executar o GC… QUandom mando executar o GC o consumo de memória aumenta ainda mais, a aplicação fica travada até ele terminar de executar e não limpa a memória.