Foros del Web » Programación para mayores de 30 ;) » Java »

(Solucionado) Exception in thread "main" java.lang.StackOverflowError

Estas en el tema de (Solucionado) Exception in thread "main" java.lang.StackOverflowError en el foro de Java en Foros del Web. Tengo un problema. Resulta que tengo una función recursiva que a veces falla y a veces no. No lo he medido pero más o menos ...
  #1 (permalink)  
Antiguo 22/04/2010, 21:20
 
Fecha de Ingreso: diciembre-2009
Ubicación: European Union
Mensajes: 29
Antigüedad: 15 años
Puntos: 2
(Solucionado) Exception in thread "main" java.lang.StackOverflowError

Tengo un problema.

Resulta que tengo una función recursiva que a veces falla y a veces no. No lo he medido pero más o menos al anidarse más de 100 veces falla.

Simplificándolo mucho, tengo una matriz de una imagen y la recorro recursivamente para agrupar los píxeles por zonas. Pero cuando la imagen tiene zonas grandes me da la excepción

Cita:
protected boolean agrupar(int x, int y, int grupo){ // coordenadas X e Y y grupo que se le quiere asignar

if(matriz[x][y].grupo!=null){
return false; // si ya tiene un grupo asignado... no hacemos nada
}
else{
matriz[x][y].grupo=grupo; // si no tiene grupo, se lo asignamos
agrupar(x, y-1, grupo); // y repetimos recursivamente: vecino debajo
agrupar(x, y+1, grupo); // repetimos recursivamente: vecino arriba
agrupar(x-1, y, grupo); // repetimos recursivamente: vecino izquierdo
agrupar(x, y-1, grupo); // repetimos recursivamente: vecino derecho
return true;
}
Lo gracioso es que el código lo tenía escrito en C y funcionaba perfectamente pero lo al portarlo a Java me he encontrado esta sorpresa.
Estoy seguro de que no entra en bucle infinito, lo que pasa es que según con qué imágenes, se pueden anidar cientos de llamadas recursivas ¿hay alguna solución a esta limitación del StackOverflow?

Os voy a poner un ejemplo. Con esta imagen:

[url=http://www.subirimagenes.com/otros-exi-4400498.html]Ver Imagen: http://s3.subirimagenes.com:81/otros/previo/thump_4400498exi.jpg[/url]

si llamo a agrupar() empezando por un pixel del círculo azul, eso empieza a llamarse recursivamente decenas de veces hasta agrupar todos los píxeles del círculo azul, y termina sin problema. Pero si lo hago con la mancha naranja se hacen muchas más llamadas recursivas anidadas (lógico porque es más grande, hay más píxeles) y en mitad del proceso me da "Exception in thread "main" java.lang.StackOverflowError" cosa que en C no me pasaba (aguantaba miles de llamadas recursivas)

Última edición por bralmu; 23/04/2010 a las 07:26 Razón: ya se ha solucionado
  #2 (permalink)  
Antiguo 22/04/2010, 22:17
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: Exception in thread "main" java.lang.StackOverflowError

Al arrancar la aplicación, ponle la opción -Xss1024k o lo que quieras.

java -Xss1024k ....

Aquí tienes la info completa

http://www.caucho.com/resin-3.0/perf...jvm-tuning.xtp

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 23/04/2010, 07:25
 
Fecha de Ingreso: diciembre-2009
Ubicación: European Union
Mensajes: 29
Antigüedad: 15 años
Puntos: 2
Respuesta: Exception in thread "main" java.lang.StackOverflowError

Muchas gracias chuidiang , fue poner eso y ya procesa todas las imágenes.

Etiquetas: solucionado, threads
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:37.