Eis o problema: você precisa gerar uma planilha gigantesca usando o JExcel e eis que de repente… BOOM! Um OutOfMemoryError ocorre salta em sua direção.
(Devo confessar: adoro esta biblioteca. Apesar de não ser tão abrangente quanto eu gostaria (não inclui gráficos), é simples o suficiente para que até um macaco consiga gerar arquivos no formato Excel sem problemas muito sérios. Mas problemas existem: e estouro de memória é um deles)
A solução é simples, e repousa na classe jxl.WorkbookSettings. Basicamente, consiste em dois métodos presentes na classe: se o seu problema de memória vier na hora de gerar uma planilha, utilize o código abaixo:
jxl.WorkbookSettings settings = new jxl.WorkbookSettings(); settings.setUseTemporaryFileDuringWrite(true);
Você irá instruir a biblioteca a utilizar um arquivo temporário no momento de geração da planilha. Caso seja definido como false (que é o default), todo o conteúdo do documento será armazenado em memória, levando ao famigerado OutOfMemoryError. Há perda de performance? Claro, mas é melhor esperar um pouco mais pelo resultado do que simplesmente nada ser gerado, não acha?
Se o seu problema dizer respeito à leitura de documentos, o código abaixo poderá resolver seu problema também:
jxl.WorkbookSettings settings = new jxl.WorkbookSettings(); settings.setInitialFileSize( tamanho em bytes );
A segunda instrução diz ao jxl qual a quantidade de memória a ser inicialmente alocada para a leitura do arquivo. Lhe trará problemas de performance? Talvez: depende do tamanho que você especifique. Por padrão (como pude ver no código fonte), a memória alocada é de 1 Mb.
Essa dica é muito boa. Valeu!