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 :

Petite question rapide sur allocation mémoire


Sujet :

Langage Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Points : 59
    Points
    59
    Par défaut Petite question rapide sur allocation mémoire
    Salut à tous,

    petite question :

    si je fais 2 "new" sur la même variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    byte[] buf = new byte[SIZE + 100];
    ...
    ...//du code...
    ...
    buf = new byte[SIZE];
    est-ce que l'espace qui a été alloué en mémoire grâce au premier "new"
    sera bien supprimé par le garbage collector avant la deuxième allocation ?
    Ou est-ce que ça va faire un conflit car la variable possèdera 2 adresses mémoire ?

    Merci.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 170
    Points
    170
    Par défaut
    La mémoire allouée lors du premier "new" sera supprimée après la deuxième allocation lorsque le garbage collector sera lancé.

    Note:
    En fait tu ne peux pas trop savoir lorsque le GC récupèrera la mémoire.
    Un object est désalloué s'il n'a plus aucun lien avec des objects de ton application. Ici vu que "buff" pointe sur la deuxième allocation, la première pourra être récupérée par le GC.

  3. #3
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Il n'y aura pas de conflit si deux byte[] sont alloués. Ce que tu fais en faisant buf = new ... lors de ta deuxième allocation, c'est que tu alloues un nouvel espace mémoire pour ton objet, et tu lui associes la référence buf. La première allocation n'a donc plus de référence, et elle sera jetée aux ordures par le gc.
    "Et tu comprendras pourquoi mon nom est l'Eternel, quand sur toi s'abattra la colère du Tout-puissant."

  4. #4
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par elmor
    La mémoire allouée lors du premier "new" sera supprimée après la deuxième allocation lorsque le garbage collector sera lancé.

    Note:
    En fait tu ne peux pas trop savoir lorsque le GC récupèrera la mémoire.
    Un object est désalloué s'il n'a plus aucun lien avec des objects de ton application. Ici vu que "buff" pointe sur la deuxième allocation, la première pourra être récupérée par le GC.
    C'est exact : dès qu'un objet ne dispose plus de référence sur lui, il est suceptible d'etre neettoyé par le garbage collector. Tu ne peux pas vraiment savoir à quel moment, meme s'il reste possible d'appeler explicitement le garbage collector au moyen de la methode System.gc() (à n'utiliser que rarement dans des cas tres tres specifiques)

  5. #5
    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,

    Citation Envoyé par leyee
    Tu ne peux pas vraiment savoir à quel moment,
    C'est possible avec les Reference et ReferenceQueue (lire : Comprendre les Références en Java), mais il y a peu d'intérêt à cela...

    Citation Envoyé par leyee
    meme s'il reste possible d'appeler explicitement le garbage collector au moyen de la methode System.gc() (à n'utiliser que rarement dans des cas tres tres specifiques)
    Je dirais même à ne surtout pas utiliser : dans le meilleur des cas il ne fera rien, mais s'il s'exécute il provoque une "full collection", c'est à dire une libération d'un maximum d'objet mais qui peut être assez couteux en temps d'exécution...

    Utiliser massivement (dans une boucle par exemple), cela peut donner des résultats catastrophique, par exemple : Difference de performances Unix/Windows d'un programme?



    Bref la libération de la mémoire est faite automatiquement par le GC, et la meilleure chose à faire est de le laisser travailler dans son coin


    a++

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Ok c'est parfait.

    Merci beaucoup.

    a+

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

Discussions similaires

  1. petite question rapide sur boucle for
    Par KateA dans le forum C
    Réponses: 15
    Dernier message: 08/03/2010, 23h59
  2. Réponses: 15
    Dernier message: 03/08/2009, 23h08
  3. Question existentielle sur allocation de mémoire
    Par keepmeahug dans le forum C++
    Réponses: 6
    Dernier message: 03/05/2007, 12h08
  4. Question rapide sur une requette simple
    Par batoubat dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/06/2006, 18h39
  5. Question rapide sur bases de donées
    Par ShortcutZ dans le forum MFC
    Réponses: 3
    Dernier message: 13/09/2005, 15h27

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