Problème de mémoire...

Problème de mémoire... - Java - Programmation

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.

Reply

Marsh Posté le 11-07-2005 à 12:52:28   

Reply

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à [:spamafote]


---------------
Soyons ouverts d'esprit, mais pas au point de laisser notre cerveau s'enfuir.
Reply

Marsh Posté le 11-07-2005 à 13:09:10    

des tableaux de quoi ?

Reply

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

Reply

Marsh Posté le 11-07-2005 à 13:29:15    

Kineas a écrit :

pourquoi ac j'en sais vraiment rien !
Mais bon l'essentiel c'est que ca marche !


tu sors, ou tu vas lire ça:
http://java.sun.com/docs/hotspot/VMOptions.html
http://blogs.sun.com/roller/resour [...] -list.html


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

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...

Reply

Marsh Posté le 11-07-2005 à 13:45:41    

En effet :D


---------------
Soyons ouverts d'esprit, mais pas au point de laisser notre cerveau s'enfuir.
Reply

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 ?


Message édité par Kineas le 21-07-2005 à 11:12:53
Reply

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 ?

Reply

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 ? :heink:


---------------
Soyons ouverts d'esprit, mais pas au point de laisser notre cerveau s'enfuir.
Reply

Marsh Posté le 21-07-2005 à 12:09:35   

Reply

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 ...

Reply

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 ?

Reply

Marsh Posté le 21-07-2005 à 12:23:51    

t'as jamais eu de cours sur la programmation ? :o

Reply

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 !

Reply

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 !

Reply

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

Reply

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 ?


---------------
Soyons ouverts d'esprit, mais pas au point de laisser notre cerveau s'enfuir.
Reply

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.

Reply

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 ?

Reply

Marsh Posté le 24-07-2005 à 00:04:10    

Combien peut on allouer a la jvm au maximun?

Reply

Marsh Posté le 24-07-2005 à 00:12:43    

allo ? c'est un bug, pas un mauvais réglage !

Reply

Marsh Posté le 24-07-2005 à 21:26:44    

Existe une classe ou une solution pour liberer la memoire en java?

Reply

Marsh Posté le 24-07-2005 à 21:29:14    

tu peux appeler le gc explicitement. RTFM. Mais ça ne changera rien, ça plantera toujours.

Reply

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.  [:airforceone]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed