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

Langage Java Discussion :

Problème de mémoire


Sujet :

Langage Java

  1. #1
    Membre du Club Avatar de Emilie MARQUOIS-OGEZ
    Femme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 80
    Points : 42
    Points
    42
    Par défaut Problème de mémoire
    Bonsoir,

    Je viens de lancer mon programme Java et j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.util.ArrayList.ensureCapacity(Unknown Source)
        at java.util.ArrayList.add(Unknown Source)
        at Launch.Member.calculRegularite(Member.java:381)
        at Launch.Member.sendAnswer(Member.java:177)
        at Launch.Member.shouldAnswer(Member.java:155)
        at Launch.Member.processNewMessage(Member.java:78)
        at Launch.Member.downloadNewMessages(Member.java:63)
        at Launch.SimVirtCom.start(SimVirtCom.java:75)
        at Launch.SimVirtCom.launchSimu(SimVirtCom.java:58)
        at Launch.SimVirtCom.init(SimVirtCom.java:51)
        at Launch.SimVirtCom.<init>(SimVirtCom.java:36)
        at Launch.GenerateExperimentations.createFiles(GenerateExperimentations.java:26)
        at Launch.GenerateExperimentations.main(GenerateExperimentations.java:37)
    Comment puis-je savoir quelle est la partie de mon programme qui pose des problèmes en terme de mémoire ? Pour info, je suis déjà en -Xmx1024m.

    Merci d'avance pour votre aide.

    Emilie

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Comment puis-je savoir quelle est la partie de mon programme qui pose des problèmes en terme de mémoire ?
    Et bien je dirais que la stacktrace est auto-documentée, non ?
    C'est lors de l'appel à ArrayList.ensureCapacity() lorsque la taille du tableau interne n'est plus suffisante pour pouvoir ajouter un nouvel élément à l'ArrayList. Dans ce cas un nouveau tableau est alloué, et l'ancien recopié dedans. C'est sans doute lors de l'allocation de ce nouveau tableau que l'exception est levée.
    Peut on savoir combien d'éléments tu places dans cette liste, et le volume occupé par chacun d'eux ?

  3. #3
    Membre du Club Avatar de Emilie MARQUOIS-OGEZ
    Femme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Au début de mon programme, 800 tableaux de ce type sont créés. Ils se remplissent au fur et à mesure et peuvent contenir de 0 à 600 éléments voire le double. Ces éléments sont des chiffres

    Voili, j'espère que ça vous aider à m'aider.

    Sinon, qu'entend-tu par "la stacktrace est auto-documentée ?" Merci.

    Emilie

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    En dessous de OutOfMemoryError, tu vois un ensemble de lignes, toutes sur le même modèle, à savoir at méthode(source java : ligne fichier). Cela correspond à l'empilement des appels de méthodes, depuis le début du thread, donc, ici at Launch.GenerateExperimentations.main(GenerateExperimentations.java:37).

    Au départ ton code est donc lancé par la méthode main de la classe Launch.GenerateExperimentations. À la ligne 37 du fichier GenerateExperimentations.java, il a appelé la méthode createFiles, objet de la ligne juste plus haut. Et ainsi de suite.

    C'est ce que l'on appelle le stack trace auto-documenté.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 170
    Points
    170
    Par défaut
    un moyen simple de debugger ton programme est de la lancer avec les options suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -XX:HeapDumpPath=ton path\log -XX:+HeapDumpOnOutOfMemoryError
    Lorsque le outofmemoryerror est declanché un fichier sera créer à l'endroit indiquer par le HeapDumpPath

    Ensuite il faut utiliser un outil de genre jhat ou SAP Memory Analyzer

    Pour analyser ta heap et en déduite ou tu as un leak ou alors quels sont les objects que tu utilises le plus...

  6. #6
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    En même temps si tu ne spécifies pas de paramètres -Xms, la mémoire de java sera limité à 64 Mo (si ma mémoire à moi est bonne ) ce qui peut expliquer ton pb.

    Si tu essaies de stocker 48000 entiers plus tout le reste du programme, c'est possible que ça dépasse les 64 Mo.
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  7. #7
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par Emilie MARQUOIS-OGEZ Voir le message
    Bonjour,

    Au début de mon programme, 800 tableaux de ce type sont créés. Ils se remplissent au fur et à mesure et peuvent contenir de 0 à 600 éléments voire le double. Ces éléments sont des chiffres

    Voili, j'espère que ça vous aider à m'aider.

    Sinon, qu'entend-tu par "la stacktrace est auto-documentée ?" Merci.

    Emilie
    Par curiosité, ne serait-ce pas un ensemble de tableaux qui représentent une image en 800*600 sur laquelle tu fais plein de calculs ?
    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.

  8. #8
    Membre du Club Avatar de Emilie MARQUOIS-OGEZ
    Femme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    Merci à tous pour vos réponses.
    Effectivement ce sont des tableaux sur lesquels je fais des calculs. Mais ce ne sont pas des images ou alors je ne comprends pas la notion d'image

  9. #9
    Membre du Club Avatar de Emilie MARQUOIS-OGEZ
    Femme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    ???
    Merci.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Les images ne sont, une fois qu'elles sont decompressees à partir des fichiers jpeg, gif ou png, ni plus ni moins qu'un gros tableau de pixels. Un pixel etant representé par un int (en general), qui contient les composants rouge, vert, bleu (et eventuellement transparence).
    C'est tres gourmand en mémoire, et souvent la cause d'une OutOfMemoryException.

  11. #11
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par Emilie MARQUOIS-OGEZ Voir le message
    Merci à tous pour vos réponses.
    Effectivement ce sont des tableaux sur lesquels je fais des calculs. Mais ce ne sont pas des images ou alors je ne comprends pas la notion d'image
    Effectivement, comme l'a dit Sanguko, je parlais d'une vraie image à afficher, d'une taille de 800*600 pixels. Je pensais que tu souhaitais faire un traitement d'image
    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.

Discussions similaires

  1. [WORD]Problème de mémoire
    Par Dnx dans le forum VBA Word
    Réponses: 17
    Dernier message: 05/10/2005, 14h48
  2. [Tomcat][Spring] Problème utilisation mémoire
    Par Wutintin dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/09/2005, 14h57
  3. [Crystal Report]Problème de mémoire avec le moteur RDC
    Par sur_uix dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/05/2005, 09h09
  4. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  5. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06

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