Problème de mémoire... - Java - Programmation
Marsh Posté le 11-07-2005 à 13:08:46
J'ai eu le même problème et je l'ai réglé avec le paramètre suivant : -Xmx1024m.
J'ai pas cherché à comprendre la signification précise mis à part que la limite supérieure de ma mémoire est maintenant de 1024 mo.
Bref, chez moi ça marche tout seul, j'ai un x et toi un s dans ce paramètre, ça vient peut-être de là
Marsh Posté le 11-07-2005 à 13:15:08
Merci Mario_ ca a l'air de marcher avec le x et pas le s mais pourquoi ac j'en sais vraiment rien !
Mais bon l'essentiel c'est que ca marche !
Merci encore
Marsh Posté le 11-07-2005 à 13:29:15
Kineas a écrit : pourquoi ac j'en sais vraiment rien ! |
tu sors, ou tu vas lire ça:
http://java.sun.com/docs/hotspot/VMOptions.html
http://blogs.sun.com/roller/resour [...] -list.html
Marsh Posté le 11-07-2005 à 13:40:04
-Xms<size> -> set initial Java heap size
-Xmx<size> -> set maximum Java heap size
Ok ca parait tout de suite plus clair...
Marsh Posté le 11-07-2005 à 13:45:41
En effet
Marsh Posté le 21-07-2005 à 11:12:32
Bonjour tout le monde,
J'ai encore un problème en rapport avec cette erreur je crois.
En fait j'ai du passer mon projet sous Jbuilder et j'ai désormais l'erreur suivante :
- java.lang.StackOverflowError
Je pense que c'est la meme erreur mais seulement je ne sais pas ou rentrer l'option -Xms512 dans jbuilder ??!!
Quelqu'un peut m'aider ?
Marsh Posté le 21-07-2005 à 11:49:00
j'ai rajouter ca dans les options du projet :
-Xms512m -Xmx1024m
Mais j'ai toujours la meme erreur : java.lang.StackOverflowError !
Cette erreur est bien due au fait qu'il n'y a pas assez de mémoire aloué pour le projet non ?
Marsh Posté le 21-07-2005 à 12:09:35
Non, le problème de mémoire c'est un OutOfMemoryError qui est envoyé.
Là, il semblerait que ce soit une erreur de récursion trop profonde (sauf erreur). T'as changé ton code entre JBuilder et Eclipse ?
Marsh Posté le 21-07-2005 à 12:11:54
quoi qu'il en soit, c'est sur que de changer la taille du tas ne résoudra pas un problème lié à la pile ...
Marsh Posté le 21-07-2005 à 12:19:52
Ok je vais essayer de trouver ce qui cause ca alors (en fait je m'etait focaliser sur cette erreur de mémoire en étant persuadé que le problème venait de là ...)
Par contre Mario qu'est ce que tu entends par recursion trop profonde ?
Marsh Posté le 21-07-2005 à 12:27:17
Ben si mais en fait je n'ai aucune fonction récursive dans mon projet donc je me demandais s'il ne faisait pas allusion a autre chose !
Marsh Posté le 21-07-2005 à 12:29:07
C'est bon j'ai trouvé d'ou evnait l'erreur ! Me reste plus qu'a la corriger ! Merci pour votre aide !
Marsh Posté le 21-07-2005 à 12:30:13
dans ce cas, ca veut dire que tu sature ta pile avec les variables locales d'une fonction
D'un autre côté, c'est sur que si tu y vas à coup de tableaux de 65536 éléments, ta pile ne durera pas longtemps
Marsh Posté le 22-07-2005 à 12:37:08
Par récursion, j'entendais une récursivité quasi-sans fin en effet.
Tant mieux si t'as réussi à corriger l'erreur. Ca venait des paramètres d'exécution ?
Marsh Posté le 23-07-2005 à 20:23:27
Bonjour,
Je suis débutant en java et j'ai aussi ce probleme en java sur un de mes programes .J'utilise 5 boules imbriqués ,jusqu'a 20 le programe fonctionne,mais si je passe les boucles a 30 j'ai ce probleme (out of memory).
D'apres ce que je l'ai lu ds ce topic,la mémoire est stokée ds la pile et non ds la memoire vive?
Si on remplace la pile par une de plus grande capacité cela peut résoudre le probléme ?
Peut on se servir du disque dur pour décharger la pile?
Merci pour vos réponses.
Marsh Posté le 23-07-2005 à 20:59:25
et elle est ou la pile ? sur une la pile du bios ? si tu bouffes du stack overflow, ça veut dire que ta récursion ne rencontre pas de condition d'arret ...
tiens juste comme ça, ça gère bien la récursivité terminale javac ?
Marsh Posté le 24-07-2005 à 21:26:44
Existe une classe ou une solution pour liberer la memoire en java?
Marsh Posté le 24-07-2005 à 21:29:14
tu peux appeler le gc explicitement. RTFM. Mais ça ne changera rien, ça plantera toujours.
Marsh Posté le 24-07-2005 à 22:21:32
Taz a écrit : tu peux appeler le gc explicitement. RTFM. Mais ça ne changera rien, ça plantera toujours. |
Tu peux aussi déréférencer explicitement. C'est pas habituel, mais ça donne un indice au GC, et dans des cas très particuliers, ça peut aider. Idem avec un appel explicite au GC. Certains GC sont parfois pris de cours, laissant un peu trop aller la conso mémoire, et parfois ça tourne mal, alors il peut être utile de kicker le GC.
Mais bon, ça reste des cas vachement limites et pas forcément applicables ici.
Marsh Posté le 24-07-2005 à 23:51:41
ici ça ne sert à rien.
Mettre à null, c'est pas inhabituel, c'est même conseilleur pour éviter les fuites de mémoires quand tu gères une collections d'objets. Par exemple, tu implémentes une pile : après avoir enlever un élément de la pile, il ne faut pas se contenter de décrémenter la variable qui indique le sommet de la pile, il faut mettre à nul l'emplacement de l'ancien sommet, pour ne pas garder une référence à l'objet qu'on vient de retourner.
Marsh Posté le 11-07-2005 à 12:52:28
Bonjour a tous,
Voila mon prbleme : je travaille sur des tableau de tres grande dimension (3 tableau de 65535 elements). Dans un premier temps j'ai eu droit a l'erreur java.lang.OutOfMemoryError.
Apres quelques recherches, j'ai rajoute ceci dans ma ligne de commande : -Xms256m.
J'ai désormais une autre erreur :
Error occurred during initialization of VM
Incompatible initial and maximum heap sizes specified
Est-ce que quelqu'un peut m'aider ?
PS : je travaille sous Windows XP avec Eclipse.