Imagens JavaME - LWUIT consomem toda a memória
Estou escrevendo um MIDlet usando o LWUIT e as imagens parecem consumir quantidades incríveis de memória. Todas as imagens que eu uso são PNGs e são empacotadas dentro do arquivo JAR. Eu carrego-os usando o método padrão Image.createImage (URL). O aplicativo tem um número de formulários e cada um tem um par de rótulos e botões, no entanto, estou certo de que apenas o formulário ativo é mantido na memória (eu sei que não é muito confiável, mas Runtime.freeMemory () parece confirmar isto).
O aplicativo funcionou bem na resolução de 240x320, mas foi movido para 480x640 e usando imagens apropriadamente maiores para a interface do usuário, o que causou a exibição de erros de falta de memória. O que o aplicativo faz, entre outras coisas, é baixar imagens remotas. O aplicativo parece funcionar bem até chegar a esse ponto. Depois de baixar alguns PNGs e retornar ao menu principal, o erro de falta de memória é encontrado. Naturalmente, eu olhei para a quantidade de memória que o menu principal usa e foi muito chocante. São apenas dois rótulos com imagens e quatro botões. Cada botão possui três imagens usadas para style.setIcon, setPressedIcon e setRolloverIcon. As imagens variam em tamanho de 15 a 25KB, mas removendo duas das três imagens usadas para cada botão (então, 8 imagens no total), Runtime.freeMemory () mostrou uma redução impressionante de 1MB no uso da memória.
Do jeito que eu vejo, ou eu tenho um monte de vazamentos de memória (o que eu não acho que faço, mas vazamentos de memória não são exatamente conhecidos por serem facilmente rastreados), eu estou fazendo algo terrivelmente errado com manipulação de imagens ou não há realmente nenhum problema envolvido e eu só preciso reduzir a escala.
Se alguém tiver algum insight para oferecer, eu agradeceria muito.