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 :

taille d'un objet non serializable


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Par défaut taille d'un objet non serializable
    Bonjour.

    Tout est dans le titre.
    Comment mesurer la taille d'un objet non serializable?

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Je ne comprends pas, c'est pour quoi faire ?

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Par défaut
    J'ai juste besoin de connaitre la taille d'un objet. Une httpSession en l'occurence, qui contient des objets non serializables.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    ce n'est pas possible. De toutes facons, la some des objets présents dans un httpsession ne réprésente pas nécessairement sa taille spécifique. Certains objets peuvant aussi être référencés ailleurs (et c'est souvent le cas). Exemple: tu stocke une session hibernate dans une httpsession, celle-ci référence la config hibernate, la factory et tous les proxy, mais cette masse importante de donnée apparitent logiquement à hibernate, pas à la session http.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Par défaut
    Quand tu dis que ce n'est pas possible, je suis un peu sceptique.
    Le serveur d'application doit bien allouer une taille pour gérer les sessions (même si celles-ci ne sont pas serializables).
    Il n'y a pas un outil qui permette d'évaluer ça? Moins lourd que faire un dump de la mémoire, ou un truc du genre...

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    Citation Envoyé par polo54 Voir le message
    Quand tu dis que ce n'est pas possible, je suis un peu sceptique.
    Le serveur d'application doit bien allouer une taille pour gérer les sessions (même si celles-ci ne sont pas serializables).
    Non, comme n'importe quel objet java, c'est la jvm qui se charge de l'allocation au besoin, c'est elle qui gère sa tambouille. En ce qui concerne le serveur d'application, pour lui une session se résume en gros à une Hashmap. Quand la session est détruite, il se contente de déréférencer la hashmap et d'appeler les éventuels listener dedans, c'est le garbage collector qui fait le reste du travail.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Par défaut
    Que ce soit sa tambouille, j'en ai bien conscience.
    En l'occurence la JVM est bien obligée d'allouer une place mémoire a cet objet (qu'il soit serializable ou non) et il y'a forcément un moyen de la mesurer (quitte à faire un dump de la mémoire).

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    Citation Envoyé par polo54 Voir le message
    En l'occurence la JVM est bien obligée d'allouer une place mémoire a cet objet (qu'il soit serializable ou non) et il y'a forcément un moyen de la mesurer (quitte à faire un dump de la mémoire).
    Non, elle n'alloue pas une place mémoire à cet objet, il peut y avoir plusieurs place mémoires alloués à l'objet. Si tu te concentre uniquement sur l'objet, je dirais que tu dois pouvoir trouver dans les spécifications de la jvm comment calculer la taille de l'objet en fonction de la définition de ses champs. Le problème principal, c'est de définir ce que tu entends pas la taille de l'objet. Exemple


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Machin {
     
       private Truc truc;
       private String string;
       private long[] tableau;
       //....
    }
    Qu'est-ce que c'est pour toi, la taille de Machin? Est que c'est la référence this+la référence à sa classe+la référence à Truc plus la référence à String+la référence à tableau? Auquel cas ce serait grosso modo 4 fois 64bits (je pense). Ou est-ce qu'il faut inclure la taille de la string, de truc et de tableau? Auquel cas il faut y aller récursivement? Mais dans ce cas là, à quel niveau s'arrête? En allant récursivement, on va mesurer la taille d'une grosse partie de la JVM, qui n'a rien à voir avec la "taille de la session" (qui reste d'ailleurs un concept à définir).

    Des outils de dump mémoire liés au débuggage sont capable de te mesurer la taille intrinsèque d'un objet, mais ça ne t'es aucune utilité, car, comme je l'ai dit, la tailel intrinsèque est la même pour toutes les instances d'une classe donnée, et ce n'est probablement pas ce que tu cherche.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Par défaut
    Si tu peut en créer, tu peut mesurer l'usage mémoire avant et après, mais ça risque d'être approximatif. Réessaye plusieurs fois pour voir si la méthode marche à peu près.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2006, 12h33
  2. [OBJET] - non-aggregate type error
    Par jacquesh dans le forum C++
    Réponses: 3
    Dernier message: 28/04/2006, 14h49
  3. [gcc/ld] comment "zapper" les objets non référéren
    Par jula dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 05/01/2006, 16h15
  4. [POO] balise ou objet non reconnu lors d'un deploiement serveur
    Par benssj5 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/01/2006, 18h26
  5. Taille d'un objet
    Par DeusXL dans le forum DirectX
    Réponses: 7
    Dernier message: 02/09/2004, 12h21

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