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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut Problème de mémoire
    Bonjour,
    je ne suis pas un habitué du forum JAVA, donc si mon poste est hors sujet, ou pas poster au bon endroit merci de me le dire.
    Voilà mon problème, j'ai un soft qui manipule beacoup de données. Cela me pose des problèmes de mémoire. En effet quand ma masse de donnée est trop importante j'ai une exeception (Exception in thread "main" java.lang.OutOfMemoryError: Java heap space).
    J'ai temporairement résolu le problème en utilisant -Xmx en paramêtre au lancement de la JVM. Mais en fait à chaque fois qu'un utilisateur à un problème il faut augmenter la taille et changer les scripts de lancement.
    N'y a-t-il pas un moyen plus efficace d'éviter ce genre de problème ?

  2. #2
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Coucou

    A part vérifier si tu es obligé d'utiliser autant de mémoire (regarde si tu ne charges pas trop d'objets, que tu libères bien les ressources), il n'y a pas grand chose à faire.

    Peut être peux-tu estimer une taille qui ne sera jamais atteinte, changer tes scripts, une bonne fois pour toute, avec cette taille.

    Désolé, mais à part ça je ne vois pas

    Bon courage

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 57
    Par défaut
    J'ai rencontré le même probléme avec un logiciel récemment.
    JMX permet d'avoir des graphs précis sur l'utilisation de la mémoire et de constater l'étendu du probléme.

    J'ai résolu cela en gérant mieux les accés à la base de données. J'ai rajouté des méthodes pour fermer les statement et les resultset tout en conservant une connexion unique via une classe singleton gérant l'accés à la base. Attention si tu fermes un statement le resultset qui en dépend ne fonctionnera plus.

    Depuis ces modifs la consommation mémoire de mon soft reste stable.

    En régle général tout ce qui est connexion vers des api, librairies exterieurs non java peut être mal ou non géré par le garbage collector et causer des memory leak.

  4. #4
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    Citation Envoyé par Sylario
    J'ai rencontré le même probléme avec un logiciel récemment.
    JMX permet d'avoir des graphs précis sur l'utilisation de la mémoire et de constater l'étendu du probléme.
    J'ai résolu cela en gérant mieux les accés à la base de données.
    Merci pour ta réponse mais j'utilise pas de base de données, c'est vraiment des fichiers txt, qui sont certes une sorte de base de données mais qui n'ont pas de gestionnaire.

    Citation Envoyé par adiGuba
    Le GC fait le reste, mais seulement pour les objets Java. Si tu utilises des ressources systèmes (fichiers, sockets, etc.) tu dois explicitement libéré ces ressources. Plus d'info : http://www.developpez.net/forums/sho...04#post1170704
    C'est gentil de précisé, mais je parlais de mémoire seulement. Après 6 de DEV en C/C++ c'est le genre de choses auxquelles je suis vachement sensible. D'ailleurs quand je code en JAVA j'ai toujours l'impression d'oublié libérer la mémoire

    Citation Envoyé par adiGuba
    Si tu ne peux pas découper la lecture des gros fichier par section
    A la lecture je découpe, je lit morceau par morceau. Le problème c'est de ce que je lit j'en extrait de l'info et c'est cette info qui me prend de la place.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BigNic
    C'est gentil de précisé, mais je parlais de mémoire seulement. Après 6 de DEV en C/C++ c'est le genre de choses auxquelles je suis vachement sensible. D'ailleurs quand je code en JAVA j'ai toujours l'impression d'oublié libérer la mémoire
    Mais je ne peux pas savoir
    Ce type d'erreur (libération de ressource) est très fréquent en Java...

    Citation Envoyé par BigNic
    A la lecture je découpe, je lit morceau par morceau. Le problème c'est de ce que je lit j'en extrait de l'info et c'est cette info qui me prend de la place.
    Tu lis ton fichier par morceau ? Quel est la taille de ces morceau au maximum ? Est-ce que tu es sûr de bien supprimé toutes les références une fois que tu n'en as plus besoin ?

    a++

  6. #6
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    Citation Envoyé par adiGuba
    Mais je ne peux pas savoir
    c'est pour ça que j'ai dit que c'était gentil de précisé. En d'autre temres ma réponse n'était pas ironique, mais sincère.

    Citation Envoyé par adiGuba
    Tu lis ton fichier par morceau ? Quel est la taille de ces morceau au maximum ? Est-ce que tu es sûr de bien supprimé toutes les références une fois que tu n'en as plus besoin ?
    a++
    Oui, mais une partie de ce que je lis je le stocke en mèmoire car j'en ai besoin. Et c'est ce que je stocke qui prend de la place.

    Au vue de vos réponses, je vai me faire un petit de JMX pour être sur que c'est bien ce que je stock le PB. Et je vais bourriner sur le -Xmx

  7. #7
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    Merci pour ta réponse Yann2.
    Pour les ressources on est d'accord que tu parle de détruire les objets, après le GC fait le reste non ? Désolé de poser des question aussi connes mais bon je débute en JAVA.
    Pour les donnée, je ne peu pas estimer la taille car en fait l'appli consiste à lire des fichiers de données txt, difficilement exploitable hummainement parlant, et convertir ces données en schéma, plus facile à exploiter. Et donc en fait, le nombre données dont j'ai besoin en mémoire, sont directement liées aux nombre de données contenus dans les fichiers txt. Pour donnée un ordre d'idée les ficheirs txt peuvent faire de quelques centaines de Ko à quelques centaines de Mo.

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par BigNic
    Pour les ressources on est d'accord que tu parle de détruire les objets, après le GC fait le reste non ? Désolé de poser des question aussi connes mais bon je débute en JAVA.
    Le GC fait le reste, mais seulement pour les objets Java. Si tu utilises des ressources systèmes (fichiers, sockets, etc.) tu dois explicitement libéré ces ressources. Plus d'info : http://www.developpez.net/forums/sho...04#post1170704


    Citation Envoyé par BigNic
    Pour donnée un ordre d'idée les ficheirs txt peuvent faire de quelques centaines de Ko à quelques centaines de Mo.
    Si tu ne peux pas découper la lecture des gros fichier par section, et que tu dois lire un fichier de plusieurs centaines de Mo, tu es obligé d'utiliser -Xmx !


    Mais à la rigueur ce ne devrait pas être trop embétant d'utiliser une valeur très grande car il s'agit de la taille maximum de la mémoire utilisable...

    a++

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