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

Collection et Stream Java Discussion :

ArrayList et libération mémoire


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Par défaut ArrayList et libération mémoire
    Bonjour

    J'ai défini une ArrayList de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<MyClass> mlistI = new ArrayList<MyClass>();

    Pour remplir cet ArrayList je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mlistI.add(new MyClass());
    mlistI.add(new MyClass());
    mlistI.add(new MyClass());
    mlistI.add(new MyClass());
    ...

    Dans le code je vais recharger des nouvelles données dans mon ArrayList : je vais donc vider mon ArrayList dans un premier temps. Je fait pour l'instant :


    Ma question porte sur la gestion de la mémoire : que se passe-t-il avec les instances de MyClass créées la première fois ? Reste-t-elle en mémoire après le 'clear' ? Si oui, avant de faire le 'clear' de mon ArrayList, faut-il les détruire pour ne pas encombrer la mémoire inutilement ?

    Je vous demande cela car je viens du monde C++ où dans ce cas là, il faut absolument gérer la destruction des instances... Mais il me semble quand Java cela n'est pas nécessaire...

    Quelqu'un peut-il me dire ce qu'il faudrait faire ?

    Merci d'avance

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,


    Lorsqu'il n'existe plus aucune référence vers un objet, on dit que ce dernier est "collectable". C'est à dire qu'il peut être libéré à tout moment par le GC.

    Tu ne peux pas prédire avec précision le moment où cela sera fait (il y a de multiples causes qui pourraient changer cela). Mais une chose est sûr : tu n'a rien à faire en particulier.


    a++

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Par défaut
    Merci pour ta réponse...

    Mais comment indiquer que mes instances ne sont plus référencées : est-ce automatique ou faut-il faire un truc de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (mListI.size() != 0)
    {
    MyClass obj = mListI.remove(0);
    obj = null;
    }

    Merci d'avance

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par TsCyrille Voir le message
    Mais comment indiquer que mes instances ne sont plus référencées
    Ben le clear() suffit amplement. A moins que tu n'ait stocké les références ailleurs...


    a++

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Par défaut
    Mes références n'étant pas stockées ailleurs, je vais donc me contenter du 'clear'...

    Merci encore pour ton aide...

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Par défaut
    Bonjour,
    Voici le traitement qui tourne vraiment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       public void clear() {
    	modCount++;
     
    	// Let gc do its work
    	for (int i = 0; i < size; i++)
    	    elementData[i] = null;
     
    	size = 0;
        }
    Donc aucun problème pour le nettoyage mémoire, pas la peine de faire un traitement superflu. Par contre, si ton tableau est très gros, tu peux aussi invoquer System.gc() pour accélérer la mise en exécution du garbage collector juste après le clear.

  7. #7
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par orsys Voir le message
    Par contre, si ton tableau est très gros, tu peux aussi invoquer System.gc() pour accélérer la mise en exécution du garbage collector juste après le clear.
    Non non et non... il ne faut pas invoquer le GC !!!
    C'est plus souvent source de problème qu'autre chose...

    a++

Discussions similaires

  1. Libération mémoire TSQLQuery
    Par obione dans le forum Bases de données
    Réponses: 9
    Dernier message: 28/03/2007, 10h02
  2. Problème de libération mémoire
    Par chrono23 dans le forum C++
    Réponses: 16
    Dernier message: 07/09/2006, 23h18
  3. Réponses: 3
    Dernier message: 14/03/2006, 05h19
  4. [COM] Libération mémoire
    Par MC2 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 13/01/2006, 16h15
  5. FIREBIRD + APPLI EN C : Problèmes de libération mémoire
    Par lio33 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 16/09/2005, 09h07

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