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 :

[Info][Mémoire] utilisée pour un pointeur null


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Points : 143
    Points
    143
    Par défaut [Info][Mémoire] utilisée pour un pointeur null
    Bonjour.
    Je voulais savoir si avoir un objet
    et qui n'est jamais instanciée occupe de la mémoire, même infime ?

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Oui je pense, mais vraiment maxi infime puisque ca doit juste être une adresse qui doit être mise à zéro.

    Pourquoi cette question ? Simple curiosité ou optimisation ? Parce que si il s'agit d'optimisation je ne pense pas qu'il soit utile de pousser jusqu'a ce niveau !!

  3. #3
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Par contre j'ai vu récemment quelquechose qui m'as grandement surpris:

    Si tu fais :

    (Calendar c'est une classe quelconque juste pour l'exemple)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Calendar calendrier = null;
    if (calendrier instanceof java.util.Calendar) {
    }
    ça ne passe pas dans le if:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calendrier instanceof java.util.Calendar
    renvoie false si calendrier est null, donc un objet null n'est pas typé !!!!!!

    Moi je pensai naïvement que le fait de définir un type même si il est nulle, il possédais une marque indiquant son type... En fait un objet doit être typé uniquement quand il est instancié !!!

    A+

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut Re: [Info][Mémoire] utilisée pour un pointeur null
    Citation Envoyé par thomas_strass
    et qui n'est jamais instanciée occupe de la mémoire, même infime ?
    oui, tout a fait, il occupe l'espace pris par la référence (mais ça ne doit pas excéder quelques octets d'après moi)

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre actif
    Avatar de narkotik
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 229
    Points
    229
    Par défaut
    4 octets logiquement
    (+mitch): nan mais nanar j'préfère mourir contre un platane apres un accident de voiture plutot que d'une rupture d'anévrisme devant mon ecran d'pc

  6. #6
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Citation Envoyé par thibaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Calendar calendrier = null;
    if (calendrier instanceof java.util.Calendar) {
    }
    ça ne passe pas dans le if:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calendrier instanceof java.util.Calendar
    renvoie false si calendrier est null, donc un objet null n'est pas typé !!!!!!
    En fait, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Calendar calendrier = null;
    définit une-boîte-qu'on-peut-mettre-des-calendriers-dedans. Sauf qu'on y met rien.

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (calendrier instanceof java.util.Calendar)
    teste si l'objet qui se trouve dans la boîte est de type calendrier. Or, la boîte est vide, la réponse est false.

    C'est un peu le problème lorsque les pointeurs sont cachés, c'est qu'on ne sait pas toujours ce qui est interprété comme... heu.... "boîte" et ce qui est interprété comme objet ("conteneur=pointeur" vs. "contenu=objet référencé").

    Mais bon...
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  7. #7
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par narkotik
    4 octets logiquement
    SVP, tu pourrais approfondir ? en logique de quoi ?

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  8. #8
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    teste si l'objet qui se trouve dans la boîte est de type calendrier. Or, la boîte est vide, la réponse est false.
    Je pensais que pour renprendre ton exemple:

    un boîte à gateaux qui même si elle est vide est toujours de par sa nature une boîte à gateaux et que même vide tu peux la différencier d'une boîte à sucre ou une boîte à idées (hum... hum... pourquoi pas ) ...

    Mais je conçois tout à fait qu'un objet null ne soit pas typé, qui plus est ça me semble logique en fin de compte, car pourquoi apporter une information supplémentaire (information de type) à une entité qui n'en a pas besoin (à savoir le pointeur null) ???

    Merci en tout cas pour ta réponse ... imagée (Miam, Miam...)

  9. #9
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    C'est du a la liaison dynamique, le type exact d'une variable n'est connu qu'a l'affectation d'un objet a cette variable..

    Ta boite a gateau pourrait etre une boite de petit lu ou une boite de petit ecoliers avec l'heritage..

    Et du point de vue logique c'est mieux ainsi car tu ne peux pas appeler les methodes de ta boite a gateau sur null donc null n'est pas une boite a gateau ..

    Bulbo

    PS: C'est malin, maintenant j'ai faim ..
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  10. #10
    Membre actif
    Avatar de narkotik
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 229
    Points
    229
    Par défaut
    Pill_S :
    SVP, tu pourrais approfondir ? en logique de quoi ?
    qd un objet pointe vers null, aucune place en mémoire n'est réservée pour l'objet car le pointeur peut pointer vers n'importe quoi, donc seul le pointeur de l'objet prend de la place en mémoire, hors comme nous travaillons sur un systeme d'exploitation 32bits et que 1 octet = 8bits, le pointeur fait 4 octets donc une variable pointant vers null ne fait que 4 octets !! et par la meme occasion une variable pointant vers null n'est pas typée puisqu'elle peut pointer vers n'importe quoi

    donc
    occupe 4 octets, ceux qui doivent contenir l'adresse mémoire d'un hypothétique futur objet
    (+mitch): nan mais nanar j'préfère mourir contre un platane apres un accident de voiture plutot que d'une rupture d'anévrisme devant mon ecran d'pc

  11. #11
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par narkotik
    hors comme nous travaillons sur un systeme d'exploitation 32bits et que 1 octet = 8bits
    OK, je savais pas que la taille des pointeurs était égale à la quantité de bits utilisés par le système

    donc d'après toi quand on passera à Windows 64 la taille des pointeurs java va aussi doubler ?
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  12. #12
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Si la jvm est maligne, ne devrait-elle pas dynamiquement utiliser 1, 2 ou 4 bytes en fonction de la taille de mémoire max qui sera allouée à l'application?
    Si on spécifie 32MB au maximum, y'a-t-il besoin de pointeurs aussi "longs" que pour 1GB?


    Sauf si y'a des raisons de performances (genre le proc il est 32b donc 4B), comme par exemple avec ces cartes graphiques qui utilisent de façon cachée des couleurs 32bits quand on les met en 24bits...
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  13. #13
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Peut etre, mais on en revient a ce probleme :

    Vaut il mieux faire des optimisations memoire et obliger le PC a faire des ajustement d'adresse chaque fois qu'on demande une lecture/ecriture memoire ?

    ou vaut il mieux utiliser plus de memoire et ne pas se préoccuper des ajustement d'adresse ?

    On n'y gagne pas forcement...

    A noter que sous windows (NT,XP,2000) les booleen du systeme sont codés sur 32 bits... alors qu'un bit suffit pour enregistrer vrai ou faux.

  14. #14
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Citation Envoyé par Fladnag
    Vaut il mieux faire des optimisations memoire et obliger le PC a faire des ajustement d'adresse chaque fois qu'on demande une lecture/ecriture memoire ?
    Bah on va se retrouver sur le forum assembleur... J'ai eu ma dose d'offset:adresse, de mov DSX et de xor eax, merci
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 137
    Points : 143
    Points
    143
    Par défaut
    Yop. Merci pour vos réponses, cest parce que j'ai une classe qui selon les cas initialise ou non certains champs.
    Et comme le programme peut générer des centaines d'objets de cette classe, ca va me faire beaucoup de mémoire perdue
    ( 4 octets * beaucoup = beaucoup trop )

    Donc je vais me créer une petite interface et des classes implémentant celle-ci.

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

Discussions similaires

  1. [phpMyAdmin] Ressources du serveur à savoir la mémoire utilisée pour les requêtes
    Par af.zakaria dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 09/09/2013, 12h44
  2. Trop de mémoire utilisée pour rien
    Par MonsieurPouet dans le forum Administration système
    Réponses: 9
    Dernier message: 27/02/2012, 10h27
  3. minimiser la mémoire utilisée pour stocker de l'information
    Par midy dans le forum Général Python
    Réponses: 3
    Dernier message: 30/01/2006, 15h17
  4. [Info]Mémoire utilisée
    Par lr dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 24/10/2005, 10h34
  5. [Info] Quels outils de develpt puis-je utiliser pour pocketpc
    Par chris69000 dans le forum Développement Mobile en Java
    Réponses: 2
    Dernier message: 22/06/2004, 10h25

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