Meu servlet está estourando a memória heap - alguém pode ajudar?

Oi,
Estou fazendo meu primeiro sistema para a Web com Java. Li um livro sobre JSP, servlets e JavaBeans, mas tenho sobre tudo isso apenas uma noção superficial. Estou tentando colocar isso em prática. Fiz um sistema em que vc fornece o nome de uma pasta no servidor, e ele mostra, em ordem, todas as imagens JPG encontradas naquela pasta.
O núcleo do sistema é um servlet que, dado um nome de arquivo, lê a imagem e a devolve para o browser. O servlet pode devolver a imagem no tamanho original ou diminuida numa proporção especificada como parametro. Tudo isso foi montado com pesquisa na Internet, pois realmente não conheço Java o suficiente para isso. No futuro, quem sabe.
O sistema está funcionando, mas com um pequeno problema. Com determinadas imagens, certamente com as maiores e também com outras, talvez mais complexas, o servlet estoura a memória heap. Para a mesma imagem, se eu peço Zoom de 25% ou de 50%, ele devolve a imagem, mas se eu peço Zoom de 75%, a memória estoura. Não sei bem o que é o heap, mas essa é a mensagem que o Tomcat retorna:

O que eu puder verificar foi o seguinte:

  • estou usando Linux Kurumin 6.0 num Pentium III 550 Mhz e 256 Mbytes RAM. O ambiente Java é o JDK 1.5.0_06. O servidor é o Tomcat 5.5.9, versão incorporada ao NetBeans 5.0.
  • a memória usada pelo servlet, quando estoura, não é toda a memória do sistema. Ele está usando apenas cerca de (contando toda a memória em uso naquele momento, no sistema como um todo) 160 ou 165 Megas. Estão “sobrando” ainda uns 90 Megas de memória RAM, sem contar a memória virtual do Linux.
    Daí a minha pergunta: tem como aumentar o uso da memória, de modo a alocar mais espaço para o servlet?
    Agradeço qualquer dica.
    Hel_all

Como você tem conhecimento superficial, vou ter que dar uma resposta superficial, mas pode ser que ajude.

Pelo que você falou eu imagino que o Servlet está colocando todas as imagens de um diretório em memória. Sendo HTTP você não precisa disso, coloque estas imagens em uma pasta pública e faça o Servlet criar a URL para elas automaticamente.

Caso você não possa colocar o diretório das imagens como público, verifique se está retirando o objeto que representa a imagemd a memória assim que não é mais necessário.

Para a função de Zoom, certifique-se que apenas a imagem sendo processada esta em memória.

Mais que isso acho que só alguém que entenda o que está fazendo…

Claro que você sempre pode aumentar a memória da JVM, mas isso não é solução na maioria das vezes…

Ok, pCalcado,
Acho que a sua resposta tem a vantagem de apontar a direção, além de dar algumas dicas concretas. Vou procurar aperfeiçoar o servlet, talvez pesquisando com mais calma, entendendo melhor o que fazer, ao invés de alocar mais e mais memória.
Valeu!
Hel_all