OutOfMemory no JAI

Boa Tarde, Estou utilizando o código abaixo passando um array de bytes de uma imagem
para ser visualizado num visualizador que eu tenho so que ele esta estourando a memória
do client que eu tenho pois o array e muito grande, são imagens de mais de 4000 de resolução.
Será que alguém teria alguma idéia de outra foram de fazer este código para otimiza-lo, pois
não posso aumentar a memória da V.M

[code] ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(byteArray);
ByteArraySeekableStream bi = new ByteArraySeekableStream(out
.toByteArray());
String[] decs = ImageCodec.getDecoderNames(bi);
ImageDecoder dec = ImageCodec.createImageDecoder(decs[0], bi, null);

    RenderedImage img = dec.decodeAsRenderedImage();[/code]
 ByteArrayOutputStream out = new ByteArrayOutputStream();  
 out.write(byteArray);  
 ByteArraySeekableStream bi = new ByteArraySeekableStream(out  
         .toByteArray()); 

Por que é que você tem de criar um ByteArrayOutputStream? Não poderíamos simplesmente usar

ByteArraySeekableStream bi = new ByteArraySeekableStream (byteArray);

Tentei fazer o que você falou, mas continua dando erro nesta parte

RenderedImage img = dec.decodeAsRenderedImage();

pois ele monta um array mto grande nesta parte do construtor da classe package java.awt.image.DataBufferByte,que é chamado
pelo metodo acima internamente.

public DataBufferByte(int size) { super(TYPE_BYTE,size); data = new byte[size]; bankdata = new byte[1][]; bankdata[0] = data; }