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 :

Singleton ou static


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 75
    Points
    75
    Par défaut Singleton ou static
    Bonjour,

    Je me pose une petite question, qui est peut-être ridicule, mais je pose quand même... ; )

    Imaginons, on implémente une classe qui propose divers service et tient un état du monde.
    Ces services doivent être accessibles partout sans instanciation directe.

    J'ai donc le choix entre tout faire en static ou tout faire dans un singleton.

    Y a-t-il une différence de mémoire/temps cpu entre ces 2 façons de faire (ne serait-ce que minime), je ne cherche aucunement à optimiser de cette manière, mais c'est juste pour info.

    Merci

    PS:si la question est vraiment ridicule, je demande à ce qu'elle soit effacée...

  2. #2
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut
    Je ne suis pas forcément le mieux placé pour te répondre, mais je vais te dire le peu que j'en sais.

    La différence va se faire au niveau de la mémoire.

    Le Singleton va rester en mémoire de son instanciation jusqu'à l'arrêt de la JVM et donc s'il demande de fortes ressources mémoire ces ressources seront à certains moments reservées pour rien.

    Pour les méthodes statiques, vont-elles t'obliger à utiliser des propriétés statiques ? Car là même si tu ne les utilises pas, les propriétés statiques restent en mémoire tant que la classe est chargée.

    Je crois que cela va dépendre du maintien ou non d'un état entre les différents appels.

    Si les appels aux méthodes n'ont aucun lien entre eux, il est à mon avis conceptuellement plus logique d'utiliser des méthodes statiques.

  3. #3
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Au niveau de la mémoire cela peut revenir au même :
    • Puisque le singleton est static, sa durée de vie sera égale à la durée de vie de l'application, et donc ses attributs occuperont la mémoire pendant toutes l'application.
    • Mais en même temps si tu utilises des attributs static à la place cela reviendra strictement au même.



    Bref le principal est de bien limiter la durée de vie des objets, en choisissant le scope le plus adapté (éviter d'utiliser des attributs d'instances ou static là ou une variable locale suffit, ...).


    a++

  4. #4
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,



    Au niveau de la mémoire cela peut revenir au même :
    • Puisque le singleton est static, sa durée de vie sera égale à la durée de vie de l'application, et donc ses attributs occuperont la mémoire pendant toutes l'application.
    • Mais en même temps si tu utilises des attributs static à la place cela reviendra strictement au même.



    Bref le principal est de bien limiter la durée de vie des objets, en choisissant le scope le plus adapté (éviter d'utiliser des attributs d'instances ou static là ou une variable locale suffit, ...).


    a++
    Comme j'essayais de le faire comprendre, ce n'est pas tout à fait vrai...

    Cela va dépendre de l'implémentation du Singleton ; s'il est sensé s'initialiser à sa première utilisation et qu'il n'est pas utilisé durant l'exécution d'une application il n'occupera pas de ressources.

  5. #5
    Membre averti Avatar de Bezout
    Profil pro
    Développement
    Inscrit en
    Septembre 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Septembre 2003
    Messages : 234
    Points : 305
    Points
    305
    Par défaut
    Ca doit être rare quand même comme cas. Car si ce singleton existe c'est qu'il a une utilité.

  6. #6
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut
    Pas forcément car il peux faire parti d'une librairie que tu vas charger, mais ne pas utiliser dans sa totalité.

    ça arrive bien plus souvent que tu ne le crois.

  7. #7
    Membre averti Avatar de Bezout
    Profil pro
    Développement
    Inscrit en
    Septembre 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Septembre 2003
    Messages : 234
    Points : 305
    Points
    305
    Par défaut
    Oui mais la c'est au créateur de l'API de se poser la question pour faire l'optimisation (-> instantiation via le getInstance) pas à l'utilisateur.

    Mais bonne remarque effectivement. On y pense pas forcément.

  8. #8
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut
    Citation Envoyé par Bezout Voir le message
    Oui mais la c'est au créateur de l'API de se poser la question pour faire l'optimisation (-> instantiation via le getInstance) pas à l'utilisateur.

    Mais bonne remarque effectivement. On y pense pas forcément.
    Mais c'est justement ce dont il est question dans ce sujet : stratégie d'implémentation.

  9. #9
    Membre du Club

    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 57
    Points
    57
    Par défaut
    Arrêtez moi si je dis une connerie, mais un élément statique n'est "instancié" également que lors de sa première utilisation.

    Par exemple, il me semble qu'un bloc statique dans une classe n'est exécuté que lorsqu'on utilise cette classe pour la première fois...

  10. #10
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut
    Une propriété statique est instanciée au chargement de la classe et non à sa première utilisation, mais ça peut très bien dépendre de la JVM utilisée.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 75
    Points
    75
    Par défaut
    Yo

    J'y ai réfléchis un peu plus (ah... fallait réfléchir avant de post. désolé)

    Le singleton est utile lorsque l'objet ne sera pas utilisé en permanence.

    Il peut être utile aussi pour réinitialiser un objet, _instance = null, et le getInstance fera une réinstantation bien transparante.

    Un objet singleton peut aussi être sérialisé.

    Ce sont ces 3 points qui me sont resté en mémoire vive
    Il y en a probablement d'autres, mais j'ai eu la réponse à ma question.

    Quasi aucun impact sur les performances.


    Je vous remercie

    Bye !

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

Discussions similaires

  1. singleton vs static
    Par cyrano_de_bergerac dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 25/06/2013, 13h07
  2. Singleton vs. static ?
    Par BastienCil dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 09/01/2013, 10h35
  3. Réponses: 3
    Dernier message: 21/02/2010, 19h09
  4. [Language][Static vs Singleton] Précisions
    Par vincent63 dans le forum Langage
    Réponses: 6
    Dernier message: 14/11/2005, 17h00
  5. singleton et static
    Par elekis dans le forum C++
    Réponses: 2
    Dernier message: 10/09/2005, 16h11

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