IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

java.lang.OutOfMemoryError: Java heap space


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Par défaut java.lang.OutOfMemoryError: Java heap space
    Salut,

    J'obtiens l'erreur de Java heap size et j'ai cru comprendre que c'est un problème de mémoire. Ca arrive à la ligne ListOfNodes.addLast(NodeToAdd) de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    for(int i=0; i<TempListOfNodes.size(); i++){
    						NodeToAdd = TempListOfNodes.get(i);
    						ListOfNodes.addLast(NodeToAdd);
    					}
    D'après ce que j'ai vu sur internet, il est possible d'élargir la taille de mon espace grâce à la commande -vmargs -Xmx512

    J'ai essayé bel et bien la ligne suivante dans la fenêtre de commande de windows "P:\eclipse-SDK-3.5.1-win32\eclipse>eclipse.exe -vmargs -Xmx512" mais ca ne marche pas.

    Quelqu'un à une idée de la source du problème.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Août 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2008
    Messages : 176
    Par défaut
    Citation Envoyé par somaa Voir le message
    Salut,



    D'après ce que j'ai vu sur internet, il est possible d'élargir la taille de mon espace grâce à la commande -vmargs -Xmx512

    J'ai essayé bel et bien la ligne suivante dans la fenêtre de commande de windows "P:\eclipse-SDK-3.5.1-win32\eclipse>eclipse.exe -vmargs -Xmx512" mais ca ne marche pas.

    Quelqu'un à une idée de la source du problème.

    Merci
    la ligne que tu as ajouté augmente la taille du heap utilisé par ecplise

    pour augmenter celui de ton programme il faut ajouter -Xmx512m dans les argument de la VM lors du lancement de ton programme
    tu trouve ceci lorsque tu fais run configuration dans eclipse

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Avant d'augmenter la mémoire allouée à ton programme, tu dois d'abord bien réfléchir s'il n'est pas possible de modifier ton algorithme pour qu'il utilise moins de mémoire. Il est peut-être possible de faire les traitements à la volée, sans stocker toutes les informations ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    Déjà, amha ce serait plus clean comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     for (NodeToAdd : TempListOfNodes)						
    		ListOfNodes.addLast(NodeToAdd);
    Après, il faut voir ce qui se passe dans "addLast"... Je subodore aussi que TempListOfNodes est superflu et double la mémoire nécessaire, ou à peu près ? Genre tu as une liste "de tout", puis tu fais des listes "de trucs à ajouter", que tu ajoutes à ta liste "de tout"... Avec quelques étapes comme ça, t'as vite fait de multiplier la mémoire nécessaire, surtout si par hasard tous ces trucs sont lus sur des fichiers...?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 49
    Par défaut
    Merci pour vos réponses

    @Sfaxiano: J'ai fait la modif et j'ai toujours un problème de mémoire, j'ai essayé -Xmx1024m et le problème persiste. Ca doit être mon algo qui est pas optimisé

    @dinobogan: Effectivement je me suis rendu compte que je génére des trucs inutiles. Merci.

    @JoeChip: J'apprends de nouvelle chose en Java! Mais en fait, comme je peux être sur que je peux me balader dans la liste TempListOfNode. Genre moi j'utilise un indice, mais apparamment dans ton (NodeToAdd : TempListOfNodes) j'ai pas l'impression que la notion d'indice est présente. Pour info, je ne traite pas des fichiers derrière

    Merci

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    Plutot que de boucler sur une liste pour ajouter, tu DOIS utiliser addAll :
    en effet, quand tu crées une nouvelle liste, sans lui filer une taille, elle a une taille courte par défaut. Quand elle va être remplie, la taille augmente, les éléments sont copiés, et c'est reparti.
    Si tu fais un addAll, la taille sera idéalement fixée, et donc la copie sera BEAUCOUP plus rapide et moins consommatrice de mémoire.

    Ensuite, détail qui n'a rien à voir, les variables commencent par une minuscule, pour les différencier des classes.

    Enfin, si tu ne connais pas le foreach (le for sans le compteur pour les Iterable) je suppose qu'il y a d'autres bases que tu ne connais pas, et qui peuvent expliquer tes problèmes de fuite de mémoire. Du coup, je te proposes de relire le cours de java.

Discussions similaires

  1. java.lang.OutOfMemoryError: Java heap space
    Par othmanbenhalima dans le forum Général Java
    Réponses: 12
    Dernier message: 08/01/2008, 17h46
  2. java.lang.OutOfMemoryError: Java heap space
    Par EvilAngel dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2007, 10h17
  3. [Findbugs] [Maven] java.lang.OutOfMemoryError: Java heap space
    Par albaille dans le forum Qualimétrie
    Réponses: 1
    Dernier message: 10/04/2007, 15h17
  4. Réponses: 4
    Dernier message: 18/09/2006, 10h02
  5. Eclipse erreur : java.lang.OutOfMemoryError: Java heap space
    Par sderecourt dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/04/2006, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo