Bonjour,
J'ai pour habitude d'utiliser le mot-clé "final" au sein des blocs fonctionnels pour empêcher la réinitialisation de certaines variables locales. Mais j'ai quelques soucis.
Voici l'exemple qui me pose problème:
Cet exemple je l'utilise dans une boucle pour obtenir tout un tas d'informations sur un ensemble de fichiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void foo(){ for (String filePath : pathList) { final MediaTags mediaInfo = new MediaTags (filePath); System.out.println ("title: " + mediaInfo.getTitle()); } }
Au bout d'un moment j'ai une exception de type dépassement de la capacité du tas (heap space) même si je l'augmente en passant un argument à la machine virtuelle.
Le mot-clé "final" semble donc déclarer les variables locales sur le tas et non sur la pile, puisque quand j'enlève le mot-clé, je n'ai plus d'erreur.
Sans ce mot-clé, la variable est visiblement sur la pile, elle est supprimée de la mémoire en sortant de la fonction donc tout va bien.
Mais du coup je n'ai plus cette sécurité qui me garantit que mon bloc de code ne va pas réinitialiser ma variable (qui n'est plus une constante).
Alors ma question est la suivante: il y a t-il un moyen de déclarer une constante locale à une fonction et qu'elle soit mise sur la pile et non sur le tas ? A ma connaissance il n'existe pas d'autre mot-clé.
Je vous remercie.
Partager