Prévenir contre une exception

invisible1 Messages postés 5 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 26 avril 2009 - 26 avril 2009 à 10:41
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Derniè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!

1 réponse

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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.
0
Rejoignez-nous