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 :

Déclaration dans ou hors de la boucle?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Par défaut Déclaration dans ou hors de la boucle?
    Bonjour à tous.
    Pour simplifier, voici ma question:
    j'aimerais savoir s'il y a une différence entre ces deux méthodes au niveau de l'occupation mémoire et de l'utilisation du garbage collector:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int essai;
    for(j=0;j<10000000000;j++) {
        essai=j+11;
        ... (on fait des calculs avec essai)
    }
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    for(j=0;j<10000000000;j++) {
        int essai=j+11;
        ... (on fait des calculs avec essai)
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    occupation mémoire:

    dans le premier, tu traine ta variable jusqu'au bout de la méthode, tu "perd" donc un entier de mémoire, pas vraiment notable, mais avec de plus grosses données ça aurait de l'influence

    coté GC: dans ce cas précis, aucune influence. Il s'agit d'un type basique stocké directement sur la stack, donc pas soumis au GC. Encore une fois si t'avais travaillé avec un gros objet, ca aurait permis de le GC, en cas de besoin, après la boucle.

  3. #3
    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,



    Le GC n'a rien à voir ici puisque tu manipules des variables locales de type primitifs.


    Sinon, la seule différence c'est que dans le premier cas ta variable sera toujours accessible après la boucle. Bref à moins d'avoir besoin de conserver cela après la boucle, il est préférable de le définir à l'intérieur de la boucle...

    a++

  4. #4
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Bref à moins d'avoir besoin de conserver cela après la boucle, il est préférable de le définir à l'intérieur de la boucle...
    Cette remarque est aussi valable pour la variable j de ta boucle.

  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 Deaf Voir le message
    Cette remarque est aussi valable pour la variable j de ta boucle.
    En effet oui j'avais pas vu

    a++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 227
    Par défaut
    OK, et j'ai la même question avec des gros objets de classe ClasseEssai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ClasseEssai essai;
    for(j=0;j<10000000000;j++) {
        essai=new ClasseEssai();
        ... (on fait des calculs avec essai)
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(j=0;j<10000000000;j++) {
        ClasseEssai essai=new ClasseEssai();
        ... (on fait des calculs avec essai)
    }
    donc si j'ai bien compris, ces deux méthodes sont identiques au niveau occupation mémoire et utilisation du garbage collector sauf que dans la première, je vais trimballer le dernier objet essai créé en dehors de la boucle for pour rien, c'est bien ça?

  7. #7
    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
    C'est bien cela !

    Dans les deux cas la référence est stocké dans le stack.
    Par contre chaque instance alloué dans la boucle est alloué dans le tas.


    Maintenant, selon l'utilisation de "ClasseEssai" et si sa valeur ne change pas il pourrait être préférable de l'instancier une seul et unique fois avant la boucle... mais on est alors dans une utilisation différente.

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/06/2007, 09h17
  2. pause dans l'execution d'une boucle...
    Par MasterOfChakhaL dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/04/2006, 21h55
  3. Servlet erreur de déclaration dans le web.xml
    Par mlequim dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/11/2005, 11h28
  4. Double déclaration dans un With
    Par Maglight dans le forum Langage
    Réponses: 4
    Dernier message: 24/08/2005, 18h19
  5. recherche dans une base de donnée+boucle
    Par eric205 dans le forum Bases de données
    Réponses: 8
    Dernier message: 15/03/2005, 21h14

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