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 EE Discussion :

De l'utilisation des singletons


Sujet :

Java EE

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut De l'utilisation des singletons
    J'ai une application Hibernate - Richfaces dans l aquelle on a un singleton
    qui regroupe toutes les actions (CRUD notamment).

    Donc à chaque fois que le client émet une request la GUI, plutôt que d instancier une classe de type action (comme dans le design pattern), récupère le singleton et appel une méthode.

    Je soupçonne un impact sur les performances, et vous ?

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Pas forcément. Le problème viendrait plutôt de la concurrence. Si tu utilises plusieurs threads et que ceux-ci effectuent des opérations idempotentes (qui ne modifie pas l'état de l'objet, de ton singleton donc), alors tu n'as pas de soucis à te faire. Plusieurs threads peuvent effectuer un même traitement sur une même classe puisque leurs piles d'appels sont différentes (donc l'enregistrement de la fonction et l'empilement de ses variables locales se fait dans des endroits différents en mémoire).

    En revanche, si plusieurs threads modifient l'état du singleton (qui contient des variables d'instance modifiables par exemple), alors oui tu as un problème, mais pas de performances.

    Pour ce qui est des purs performances, théoriquement c'est plus performant d'avoir un singleton. Cela t'évites de créer des objets à courte durée de vie en mémoire, et donc te force à faire moins d'appels du GC.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Oui mais comment J2EE fait sa vie par rapport a la serialisation - deserialisation des objets pour liberer de la memoire. Si le container veut de la memoire, en serialisant un objet qui garde un lien vers le singleton tandis qu un autre objet travail dessus est ce que ca peut pas poser un probleme. Car le singleton doit pas etre serialise lui.

    Est ce que tu penses pas que ca peut poser un probleme ?

  4. #4
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Quand tu me parles de singleton, tu parles d'EJB Singleton ? Si oui, rassure toi, le conteneur sait ce qu'il fait. Mais il faut littéralement manger de la mémoire pour en arriver à faire du swap.

    A la base, ce sont les EJB statefull qui sont mis sur disque, afin d'éviter de tenir des contextes en mémoire qui sont potentiellement inutile, ou inutilisés depuis un certain temps. Les EJB Singleton ne sont pas mis sur disque. Sache néanmoins que par défaut, plusieurs threads ne peuvent au même moment accéder à ton EJB. Pour rendre cela possible, il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ConcurrencyManagement(ConcurrencyManagementType.BEAN)
    .

    Selon moi, le problème réel derrière n'est pas les performances, mais la concurrence. Si tu autorises plusieurs threads à accéder au même moment à ton singleton, faudra gérer à la main le verrouillage. Sinon, tes threads sont mis en attente pendant que l'on utilise ton EJB.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    En faite j ai des singletons de classes classiques (pas EJB), et effectivement j'ai des méthodes en synchronized.

    Merci pour ta réponse ça m’éclaircit les idées

Discussions similaires

  1. Règles d'utilisation des forums C
    Par Franck.H dans le forum C
    Réponses: 3
    Dernier message: 26/01/2008, 17h35
  2. [CR8.5] Utilisation des codes barre
    Par Robert dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 20/01/2005, 16h13
  3. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24
  4. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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