Erro: java.lang.OutOfMemoryError

Olá pessoal, boa noite.

Estou desenvolvendo um jogo (Puzzle - http://www.permadi.com/java/puzzle8) em java onde insiro o estado inicial e o estado final.
Monto a estrutura de árvore e o método de busca na árvore a Busca Por Extensão.
Quando o estado inicial e o estado final e muito diferente e executo o programa ele retorna o seguinte erro: java.lang.OutOfMemoryError.
Como posso descobrir em qual linha ele dá esse erro e como solucioná-lo?

Obrigado a todos.

Fabricio Soares

Oi

umcertoalguem… que legal esse nick cara…

Olha, teu código tem algum loop que crie instancias de alguma classe qualquer??? Se tiver, de uma conferida nele… Mas, em todo caso, tu pode postar teu código aqui, se puder né.

T+

Olá jeveaux, boa noite.

Segue o meu código abaixo.

Ele cria uma árvore e uma lista.
Estou com dificudades de trabalhar com Listas em Java, eu trabalho muito bem com elas no C e C++;

// Inicialização da rotina de Busca Por Extenção public void StartNodoExtencao(Nodo Start, Nodo End) { // O No atual recebe o inicio da árvore Nodo No = new Nodo(); Nodo Children = new Nodo(); Fifo FifoStart = new Fifo(); Fifo FifoEnd = new Fifo(); Fifo FifoNo = new Fifo(); // O No no atribulo Father é ligado ao null No = Start; No.Father = null; // O atribulo Blank recebe o campo em que o Puzzle está branco int Blank, Motion, i, j; int[] Positions; String[] Puzzle; // Rotina de criação dos nós filhos while(PartOut(No, End) != 0) { // O método TestBlank retorna a possição em branco do Puzzle Blank = TestBlank(No); // O método StartNodoFathe cria todos os filhos do No atual // StartNodoFather(No, Blank, FifoStart, FifoEnd); Motion = MotionNodoFather(Blank, No); // Cria um vetor que irá guardar as posições dos movimentos possíveis Positions = new int[Motion]; // O método PositionsNodo retorna para o vetor Positions as posições que serão movimentadas Positions = PositionsNodo(No, Positions, Blank); // Cria o número do filhos que o Nodo No irá apontar No.Son = new Nodo[Motion]; // Cria uma nova string de caracteres Puzzle = new String[9]; // Rotina ligação dos nós filhos para o nó pai for(i = 0; i < Positions.length; i++) { // Monta uma string igual a string do Nodo No for(j = 0; j < 9; j++) Puzzle[j] = No.Puzzle[j]; // Faz a troca de dados referente as posições do Positions e do Blank Puzzle[Blank] = Puzzle[Positions[i]]; Puzzle[Positions[i]] = ""; // Cria um novo Nodo chamado Children e joga a string atual Children = new Nodo(Puzzle); FifoNo = new Fifo(Children); // FifoNo.InsertFifo(Children, FifoNo, FifoStart, FifoEnd); if(FifoStart.No == null) { FifoStart = FifoEnd = FifoNo; FifoStart.FifoBack = null; FifoStart.FifoNext = null; FifoStart.No = Children; } else { FifoEnd.FifoNext = FifoNo; FifoNo.FifoBack = FifoEnd; FifoNo.FifoNext = null; FifoNo.No = Children; FifoEnd = FifoEnd.FifoNext; } // O Nodo No no atributo Son é ligado ao atual Nodo Children No.Son[i] = Children; // O Nodo Children no atributo Father é ligado ao Nodo No Children.Father = No; } if (No != Start) { if(FifoStart != FifoEnd) { FifoStart = FifoStart.FifoNext; FifoStart.FifoBack = null; } } No = FifoStart.No; } JOptionPane.showMessageDialog(null, "Encontrou"); }

[color=“green”][size=“11”]* Lembre-se da tag [code]![/size][/color]

bem, como a exceção é OutOfMemoryError, como disse o jeve, o problema deve estar em algum laço, q esta instanciando muitos objetos na memória, nao rodei teu código, porém achei essas instruções detro de 2 laços aninhados:

for(i = 0; i < Positions.length; i++) { for(j = 0; j < 9; j++) { ... Children = new Nodo(Puzzle); FifoNo = new Fifo(Children); ...

…imagino q estes laços estão chamando criando muitos objetos Nodo e Fifo, e dependendo do tamanho da sua memória… ela pode terminar ligeirinho! :roll:

Nossa mãe, o Java consome tanta memória assim?

Bom tarde a todos.

Como esse erro é decorrente de falta de memória durante a execução do programa, terei que procurar as linhas onde está criando os objetos que compõem a árvore… ouvi falar sobre desalocação de memória, alguem poderia me repassar uma forma de fazer isso?

Obrigado.

Fabricio Soares