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

JPA Java Discussion :

EntityManager & memory


Sujet :

JPA Java

  1. #1
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut EntityManager & memory
    Bonjour à tous,
    Je débute en JPA et la première chose qui me vient à l'esprit, c'est comment limiter l'occupation mémoire d'un EntityManager ?
    Donc en gros retirer les objets de l'EM sans les retirer de la BD.
    Ou encore mieux : avoir un nombre limités d'objets dans l'EM.

  2. #2
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Le mieux est d'éviter d'avoir un entity manager ouvert en permanence. Par exemple, il ne reste ouvert que durant une transaction.
    Sinon, tu peux le vider des entités (sans les supprimer) avec la méthode clear.

  3. #3
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    Merci.
    Mais ya pas un EntityManager qui fait un genre de cache de taille limitée ?
    Si par exemple j'itère dur ma base dans une seule transaction, j'vais avoir un EntityManager énorme. Et pourtant j'l'aurrai fait en une seule transaction...

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par r1-1024 Voir le message
    Merci.
    Mais ya pas un EntityManager qui fait un genre de cache de taille limitée ?
    Si par exemple j'itère dur ma base dans une seule transaction, j'vais avoir un EntityManager énorme. Et pourtant j'l'aurrai fait en une seule transaction...
    Est-ce que c'est le cas ?

    Ça ne sert à rien de vouloir optimiser un problème qui n'est pas présent. N'optimise cela que si la taille de ton entity pose vraiment problème au niveau de la mémoire. Et le cas échéant, vérifie que c'est bien de là que vient le problème de mémoire.

  5. #5
    Membre confirmé Avatar de r1-1024
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 138
    Par défaut
    Si je fais EntityManager.createQuery("select ...").getResultList()
    L'ensemble des objets qu'il me renvoie ne sont pas dans l'EM ?

    C'est dommage qu'on ne puisse pas connaître le nombre d'objets dans l'EM.

  6. #6
    Membre averti
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Par défaut
    En général les objets sont chargés par "bloque" de taille configurable lors du parcours de la liste.

    A mon avis , avec Hibernate si tu utilise le hint suivant, les objets iront pas dans EM.

    query.setHint("org.hibernate.readOnly","true");

    PS: EntityManager n'est pas un cache, il garde les objets "managés" jusqu'à la fin de la transaction ou il va les sauver. Tu peux utiliser un cache niveau 2 lui, de taille configurable et d'une durée de vie plus longue que la transaction.

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/02/2004, 09h32
  2. [JBuilder 8] Out of memory problem ...
    Par keros dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/09/2003, 19h03
  3. Problème avec memory mapping
    Par gemai dans le forum C
    Réponses: 13
    Dernier message: 04/07/2003, 09h50
  4. Memory fault(coredump)
    Par nono1 dans le forum C
    Réponses: 8
    Dernier message: 17/12/2002, 17h26

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