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 :

optimisation mémoire


Sujet :

Java

  1. #1
    cgu
    cgu est déconnecté
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut optimisation mémoire
    Hello tout le monde,

    Existe t il un moyen d'intervenir manuellement sur la memoire (hors mecanisme Garbage Collector) ?! En d'autres termes le GC est il debrayable si besoin pour forcer la desalllocation d'un objet ?! J'ai bien entendu parlé des objets de reference mais je ne suis pas sûr que ça m'emmene bien loin...

    Une autre petite qst pendant que j'y suis, les variables locales d'une méthode non statique sont je suppose candidates au GC une fois sorti de celle-ci ? En est il de meme pour les variables locales des méthodes statiques ?

    Merci pour votre participation

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut Re: optimisation mémoire
    Hello,

    Citation Envoyé par cgu
    Existe t il un moyen d'intervenir manuellement sur la memoire (hors mecanisme Garbage Collector) ?! En d'autres termes le GC est il debrayable si besoin pour forcer la desalllocation d'un objet ?! J'ai bien entendu parlé des objets de reference mais je ne suis pas sûr que ça m'emmene bien loin...
    Personnellement, je n'en connais aucune. La mémoire est gérée automatiquement, que tu le veuille ou non (et je peux te promettre que ça évite beaucoup de bugs ). La seule chose que je connaisse, c'est les appels à "System.gc();", qui réclament un passage du GC, mais sans garantir qu'il sera bien exécuté!
    Quant aux "objets de référence", je ne connais pas du tout, je doute même que cela soit un terme utilisé en java...

    Citation Envoyé par cgu
    Une autre petite qst pendant que j'y suis, les variables locales d'une méthode non statique sont je suppose candidates au GC une fois sorti de celle-ci ? En est il de meme pour les variables locales des méthodes statiques ?
    Oui, et ça va même plus loin: la durée de vie de n'importe quelle variable est limitée au bloc qui la déclare. Si tu déclare une variable dans une boucle par exemple, à chaque itération la variable meurt et est recréée (pour autant qu'elle ne soit pas référencée ailleurs dans le programme)

    Citation Envoyé par cgu
    Merci pour votre participation
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre habitué Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Points : 163
    Points
    163
    Par défaut
    Bon je ne pense pas t'aider mais on ne sait jamais; il y a un peu de tuning à faire avec la gestion des références via les classes héritant de la classe abstraite Reference (PhantomReference, SoftReference, WeakReference).
    Je n'ai jamais utiliser et je ne me suis jamais pencher sur ces classes
    Tu peux voir dans la javadoc.

    ...pas très utile ce post en fait
    Pushing the limits ...

  4. #4
    cgu
    cgu est déconnecté
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par nicgando
    Bon je ne pense pas t'aider mais on ne sait jamais; il y a un peu de tuning à faire avec la gestion des références via les classes héritant de la classe abstraite Reference (PhantomReference, SoftReference, WeakReference).
    Je n'ai jamais utiliser et je ne me suis jamais pencher sur ces classes
    Tu peux voir dans la javadoc.

    ...pas très utile ce post en fait
    C'est effectivement de ses classes dont je parlais

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par nicgando
    PhantomReference, SoftReference, WeakReference
    ah d'accord, là ça me parle plus

    mais moi non plus, je n'ai jamais eu besoin de les utiliser... désolé
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  6. #6
    cgu
    cgu est déconnecté
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Re: optimisation mémoire
    Citation Envoyé par Pill_S
    La mémoire est gérée automatiquement, que tu le veuille ou non (et je peux te promettre que ça évite beaucoup de bugs ).
    Ben je veux bien te croire, mais ca me pose un vrai pb d'utilisation : je cherche a remplir une base de données a partir de données contenues dans un fichier texte.

    Le tout est realise en java via une methode qui charge les données (utilisation de variables locales) avant de les mettre en base via JDBC.

    Malheureusement, la memoire consommée pendant l'operation ne sera par la suite jamais relachee (meme apres appel au GC)...

  7. #7
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut Re: optimisation mémoire
    Citation Envoyé par cgu
    Malheureusement, la memoire consommée pendant l'operation ne sera par la suite jamais relachee (meme apres appel au GC)...
    Peux-tu nous expliquer ce qui te fait penser ça?
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  8. #8
    cgu
    cgu est déconnecté
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Re: optimisation mémoire
    Citation Envoyé par Pill_S
    Citation Envoyé par cgu
    Malheureusement, la memoire consommée pendant l'operation ne sera par la suite jamais relachee (meme apres appel au GC)...
    Peux-tu nous expliquer ce qui te fait penser ça?
    ben les fonctions MaxMemory, FreeMemory, et TotalMemory m'ont bien aidé

    en fait, mon soft fait pas mal d'import/export de données et ces operations consomment malheureusement pas mal de ram... tout se passe correctement en test unitaire mais c'est en enchainant les operations que le pb est apparait, et meme si on attend 30 minutes entre deux operations, la memoire n'est jamais liberee... d'ou mon inquietude, des references aux objets doivent persister, mais je n'utilise a priori que des variables locales

  9. #9
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Est-ce que tu es sûr de bien fermer toutes tes ressources ouvertes ?

    Par exemple, avec JDBC, on devrait fermer manuellement les connexions, les statement et les resultset...

    ça m'étonnerait que le problème vienne de là, mais c'est peut-être un début de piste... en tout cas, il est difficile de mieux t'aider sans se plonger dans le code

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 50
    Points : 70
    Points
    70
    Par défaut
    Alors y'a des trucs que l'on m'a montré en formation cartographique.

    Une fonction appelée souvent et dont il est nécessaire d'allouer une variable, tu passes cette variable en membre
    Par exemple, sur une méthode repaint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void repaint() {
      BBox bb = new BBox();
     
      bb.setRect(this.x - l, this.y -h, this.x + l, this.y + h);
     
      bb.redraw(this);
    }
    La méthode repaint est appelé très souvent et cet exemple montre que tu peux facilement exploser ta mémoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BBox bb = new BBox();
     
    void repaint() {
      bb.setRect(this.x - l, this.y -h, this.x + l, this.y + h);
     
      bb.redraw(this);
    }
    En faisant ça, tu fais une allocation unique et tu réutilises ta variable. C'est une manière d'optimisation de la mémoire

  11. #11
    cgu
    cgu est déconnecté
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Pill_S
    Est-ce que tu es sûr de bien fermer toutes tes ressources ouvertes ?

    Par exemple, avec JDBC, on devrait fermer manuellement les connexions, les statement et les resultset...

    ça m'étonnerait que le problème vienne de là, mais c'est peut-être un début de piste... en tout cas, il est difficile de mieux t'aider sans se plonger dans le code

    effectivement, y'a peut etre de ça... j'ai meme vu qq personnes forcer les variables locales (objets) a null en fin de traitement pour exclure toute ambiguité sur leur referencement...

    merci a toi pour ta reactivité

  12. #12
    cgu
    cgu est déconnecté
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par phryos
    En faisant ça, tu fais une allocation unique et tu réutilises ta variable. C'est une manière d'optimisation de la mémoire
    Effectivement c'est la premiere chose qui m'est venue a l'esprit des qu'il a fallu aborder le sujet de l'optimisation, et dieu sait que cette premiere etape est indispensable !!! parceque coder propre c'est une chose, coder efficace en est une autre et meme avec un peu de metier, c'est pas forcement evident d'etre efficace des le premier jour, tant qu'on a pas été confronté a de réels pb de performance

Discussions similaires

  1. Optimisation mémoire Datatable
    Par Dullbrain dans le forum VB.NET
    Réponses: 6
    Dernier message: 15/05/2012, 12h31
  2. Configuration/Optimisation Mémoire Oracle 10g
    Par jfmerveille dans le forum Oracle
    Réponses: 1
    Dernier message: 13/02/2012, 12h35
  3. Optimisation mémoire - Garbage collector
    Par MisterMok dans le forum Framework .NET
    Réponses: 1
    Dernier message: 07/11/2011, 14h31
  4. [Optimisation] Mémoire occupée par des images
    Par Crowell dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 23/05/2007, 16h34
  5. Optimisation mémoire sur des String
    Par CyberChouan dans le forum Langage
    Réponses: 6
    Dernier message: 25/02/2007, 20h25

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