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 :

Accesseur : public private et performance


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de adilou1981
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut Accesseur : public private et performance
    Bonjour,

    si je chnage l' accesseur d'une méthode de private a public quel impact a t-il sur les performances ?

    Merci

  2. #2
    Membre émérite Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    je ne suis vraiment pas sur du tout que cela influe sur les performances... c'et juste une question d'accessibilité pour les autres classes...
    Après c'est évident que si tu met une méthode en public ben c'est que d'autres classes peuvent y accéder etc.. donc il y aura plus de traitement...
    enfin pour moi ça n'influe pas intrinsèquement sur la rapidité...

  3. #3
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    J'en profite pour poser une question un peu dans le même sens : est-ce que le fait de passer par un getter plutôt qu'accéder directement à la propriété coute du temps ?

    En gros, est-ce que le compilateur détecte que c'est un getter qui ne fait que rediriger vers le membre et donc optimise le code généré ?

  4. #4
    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 DevTeam_ Voir le message
    J'en profite pour poser une question un peu dans le même sens : est-ce que le fait de passer par un getter plutôt qu'accéder directement à la propriété coute du temps ?

    En gros, est-ce que le compilateur détecte que c'est un getter qui ne fait que rediriger vers le membre et donc optimise le code généré ?
    Tant qu'il n'est pas redéfini la différence est vraiment minime, surtout que pour les getter tout simple sans trop de code le résultat est tout simplement "inliné", c'est à dire qu'avec le getter suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int getValue() {
        return value;
    }
    Et le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int a = monObject.getValue();
    La JVM compilera cela comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int a = monObject.value;
    Donc il n'y a aucune raison de passer à coté


    a++

  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
    Salut,

    Il y a bien une différence puisqu'une une méthode private n'est pas virtuelle, contrairement à une méthode public.


    En effet comme une méthode private ne peut pas être redéfinie on n'a pas besoin de vérifier le type exact de l'instance pour rechercher la bonne méthode à appeller. C'est pourquoi les méthodes privates sont appellées via l'instruction invokespecial qui se contente d'invoquer la méthode.


    A l'inverse, les méthodes publics peuvent être redéfinies et sont donc appellée via l'instruction invokevirtual qui vérifie le type de l'instance avant de rechercher la bonne version de la méthode à appeler... ce qui est un peu plus couteux...


    Plus d'info : Quels sont les différents modes d'invocation de méthode ?


    Toutefois il faut nuancer cela par plusieurs points :
    • La JVM sait très bien optimiser les appels invokevirtual, et si le classloader ne comporte aucune classe redéfinnissant la méthode, l'appel sera direct ou presque et offrira le même ordre de performance que l'instruction invokespecial.
    • De même pour les méthodes public final qui ne peuvent pas être redéfinies, qui sont bien appellée avec invokespecial (contrairement à ce que dit la FAQ par erreur).



    Maintenant s'il existe plusieurs "versions" de la méthode public, les différences peuvent être importante sur un très grand nombre d'appel...


    a++

  6. #6
    Membre éclairé Avatar de adilou1981
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut
    Merci adiGuba c'est très enrichissant.

  7. #7
    Membre émérite Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Par défaut
    oui adiGuba est l'un des fondateurs du langage java

    c'est la classe .. juste

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

Discussions similaires

  1. public, private et VBS
    Par Magique dans le forum VBScript
    Réponses: 3
    Dernier message: 03/03/2007, 07h16
  2. Public Private Protected
    Par Sabrina_of_darkness dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2006, 22h21
  3. Réponses: 8
    Dernier message: 10/09/2005, 20h12
  4. Protected / Public / Private....
    Par GOUGOU1 dans le forum C++
    Réponses: 16
    Dernier message: 17/03/2005, 22h04
  5. Réponses: 8
    Dernier message: 20/12/2004, 15h14

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