Como evitar OutOfMemoryError para esse processamento?[RESOLVIDO]

Galera, tenho um método que é chamado dentro de um while o qual roda centenas de vezes, pois estou fazendo o processamento de uma imagem através de 4 vizinhança.
Dentro desse método, vou empilhando pontos que indicam as posições x e y de um pixel da imagem.
Enfim, por haver um while loopando centenas de vezes tá enchendo a memória.

Alguém poderia me dar uma idéia de otimização!?!?!

Grato


public void verificaPonto(int[][] matriz, int largura, int altura, Integer[] ponto){
		if(matriz[0][0] == 1 && ponto[0] > 0 && ponto[1] > 0){
			if(image.getRGB(ponto[0]-1, ponto[1]-1) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0]-1;
				pont[1] = ponto[1]-1;
				lista.add(pont);
				pont = null;
			}
		}
		if(matriz[1][0] == 1 && ponto[1] > 0){
			if(image.getRGB(ponto[0], ponto[1]-1) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0];
				pont[1] = ponto[1]-1;
				lista.add(pont);
				pont = null;
			}
		}
		if(matriz[2][0] == 1 && ponto[0] < largura-1 && ponto[1] > 0){
			if(image.getRGB(ponto[0]+1, ponto[1]-1) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0] + 1;
				pont[1] = ponto[1] - 1;
				lista.add(pont);
				pont = null;
			}
		}
		if(matriz[0][1] == 1 && ponto[0] > 0){
			if(image.getRGB(ponto[0]-1, ponto[1]) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0] - 1;
				pont[1] = ponto[1];
				lista.add(pont);
				pont = null;
			}
		}
		if(matriz[1][1] == 1){
			if(image.getRGB(ponto[0], ponto[1]) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0];
				pont[1] = ponto[1];
				lista.add(pont);
				pont = null;
			}
		}
		if(matriz[1][2] == 1 && ponto[1] < altura-1){
			if(image.getRGB(ponto[0], ponto[1]+1) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0];
				pont[1] = ponto[1]+1;
				lista.add(pont);
				pont = null;
			}
		}
		if(matriz[0][2] == 1 && ponto[0] > 0 && ponto[1] < altura-1){
			if(image.getRGB(ponto[0]-1, ponto[1]+1) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0]-1;
				pont[1] = ponto[1]+1;
				lista.add(pont);
				pont = null;
			}
		}
		if(matriz[2][1] == 1 && ponto[0] < largura-1){
			if(image.getRGB(ponto[0]+1, ponto[1]) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0];
				pont[1] = ponto[1]+1;
				lista.add(pont);
				pont = null;
			}
		}
		if(matriz[2][2] == 1 && ponto[0] < largura-1 && ponto[1] < altura-1){
			if(image.getRGB(ponto[0]+1, ponto[1]+1) == Color.BLACK.getRGB()){
				Integer[] pont = new Integer[2];
				pont[0] = ponto[0]+1;
				pont[1] = ponto[1]+1;
				lista.add(pont);
				pont = null;
			}
		}
		int x = lista.get(lista.size()-1)[0];
		int y = lista.get(lista.size()-1)[0];
		saida.setRGB(x,y,Color.BLACK.getRGB());
		image.setRGB(x,y,Color.WHITE.getRGB());
		lista.remove(lista.size()-1);
	}

Não sei qual é sua regra de negócio.

Mas para fins de otimização às vezes é melhor ter os laços dentro da função. Do que chamar a função várias vezes dentro dos laços.

Deu pra entender?

essa lista sua deve estar removendo bem menos pontos do que adiciona, não?
Coloca um break point ali e veja se ela remove os vetores inúteis.

Oi,

Só não vai me dizer que a chamada deste while está dentro de uma Thread ou ‘N’ Threads, né?!

Tchauzin!

[quote=juliocbq]essa lista sua deve estar removendo bem menos pontos do que adiciona, não?
Coloca um break point ali e veja se ela remove os vetores inúteis.[/quote]

RESOLVIDO:

troquei Integer por Point e funcionou incrivelmente rápido o processamento… hasusaasu

falow