invisible1
Messages postés5Date d'inscriptionmercredi 24 décembre 2008StatutMembreDernière intervention26 avril 2009
-
26 avril 2009 à 10:41
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
26 avril 2009 à 10:59
salut,
Mon problème est que lors de l'exécution de mon programme, une exception java.lang.StackOverflowError est lancée. Mon compilateur (NetBeans) ma indiqué que cette exception est produite lors d'un appel d'une fonction récursive.
Alors si ce ci est une problème de mémoire, comment je peut l'éviter?
Merci!
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 26 avril 2009 à 10:59
Salut,
Il peut s'agir en effet d'un problème de mémoire, mais bien souvent, il s'agit d'un trop grand nombre d'appels récursifs.
Il faut savoir que lors d'un appel de fonction, les paramètres de cette fonction sont empilés dans un emplacement mémoire qu'on appelle la pile. La pile est bien plus petite que l'emplacement mémoire réservé (le tas) pour les variables globales et locales.
Donc le nombre d'appels de fonctions possibles dépend du nombre de paramètre de la fonction, et de la taille de chacun des paramètres (il est plus efficace de passer 1 entier qu'un objet contenant 15 champs...).
Mais bien souvent, cette exception est levée lors d'une boucle infinie dans la récursion !
Si c'est un problème qui intervient ponctuellement, essaye de l'analyser pour voir si tu ne passe pas dans le cas d'une boucle infinie. Sinon, essaye d'alléger les paramètres de ta fonction récursive, ou alors passe par une fonction itérative qui sera forcément plus légère à exécuter et qui t'évitera ce genre de problèmes, ou encore essaye de décomposer ton problème en plusieurs appels distincts de fonctions.