Bonjour,
J'ai codé en Java un modèle et je lance plusieurs simulations. Après chaque simulation j'aimerai vider la mémoire, supprimer toutes les données.
Comment dois-je faire ?
Un System.gc(); suffit ?
Merci pour vos réponses.
Emie
Bonjour,
J'ai codé en Java un modèle et je lance plusieurs simulations. Après chaque simulation j'aimerai vider la mémoire, supprimer toutes les données.
Comment dois-je faire ?
Un System.gc(); suffit ?
Merci pour vos réponses.
Emie
Il suffit de ne plus référencer tes objets.
C'est à dire mettre tes variables pointant sur des objets à null.
Un Systeme.gc() ne te garantie en rien le démarrage du garbage collector.
Au plus tu lui demandes gentillement de t'excuser de lui demander pardon de bien vouloir envisager un eventuel nettoyage.
Enfin peut être si il est bien luné et surtout si il en a besoin.
OK. Mais comment on fait ? Surtout quand on a beaucoup de variables ?
Tu n'as pas de contrôle direct sur la mémoire en Java. Le GarbageCollector est là pour s'en occuper.
Si tu veux qu'un objet soit libéré de la mémoire, il te suffit de t'assurer qu'il n'y a plus aucune référence vers lui.
Toine
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Integer myInt = new Integer(100); // ... Début des traitements avec le myInt ... // ... // ... Fin des traitements ... myInt = null;
Quand tu as bcp d'objets la solution consiste à les "wrapper" dans un conteneur et de cette facon tu n'as plus qu'a de "setter" ce conteneur à null
Génial !
Et comment fait-on ça ?
J'ai regardé dans la javadoc, mais je n'ai rien trouvé.
J'ai peut-être mal regardé.
Merci.
Emie
Ensuite si tu déréférences ton instance de "MonConteneur", tous les objets internes seront également libérés car plus personne ne les référencera...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class MonConteneur { protected Object obj1; protected Object obj2; protected Object obj3; protected Object obj4; ... }
MonConteneur monConteneur = new MonConteneur();
// Traitement sur mon conteneur ...
// ...
// Fin des traitements...
monConteneur = null;
Tu vois le principe ? Tout réside dans le référencement des objets...
Toine
OK. Merci beaucoup. Je vois le principe. Je vais essayer de mettre ça en place.
N'hésite pas si tu as besoin d'aide ...
Et n'oublie pas le tag "résolu" (en bas à gauche du forum)
Toine
Partager