[java] détruire un objet

détruire un objet [java] - Java - Programmation

Marsh Posté le 18-05-2004 à 17:01:15    

Bonjour,
je voudrais savoir s'il est possible de détruire un objet qui ne me sert plus (pour ne pas gaspiller la mémoire);
 
Merci pour vos conseils
++

Reply

Marsh Posté le 18-05-2004 à 17:01:15   

Reply

Marsh Posté le 18-05-2004 à 17:04:57    

Reply

Marsh Posté le 18-05-2004 à 18:18:47    

en gros les objets qui ne sont plus référencés sont detruits par le garbage collector. Pour détruire un objet, il te suffit de mettre toutes ses références à null.

Reply

Marsh Posté le 18-05-2004 à 18:52:33    

heu oui mais ca n'est pas forcément une trés bonne idée...
imagines tu as une List qui contient 10.000 objets, il faudrait parser toute la liste pour mettre chaque objet à null, ca va être trés lent! :ouch:  
Dans les dernières versions de JVM, ca n'est pas recommandé. Le cout d'allocation est trés faible, et le garbage collector est beaucoup plus efficace qu'avant, il vaut mieux lui laisser faire le travail tout seul.
Mieux vaut mettre ses efforts dans le tuning de la JVM...

Reply

Marsh Posté le 18-05-2004 à 18:54:56    

_guigui_ a écrit :

heu oui mais ca n'est pas forcément une trés bonne idée...
imagines tu as une List qui contient 10.000 objets, il faudrait parser toute la liste pour mettre chaque objet à null, ca va être trés lent! :ouch:  
Dans les dernières versions de JVM, ca n'est pas recommandé. Le cout d'allocation est trés faible, et le garbage collector est beaucoup plus efficace qu'avant, il vaut mieux lui laisser faire le travail tout seul.
Mieux vaut mettre ses efforts dans le tuning de la JVM...

ben si il reste une référence vers ton objet qui n'est pas null, le garbage collector le détruira pas.

Reply

Marsh Posté le 18-05-2004 à 19:18:09    

_guigui_ a écrit :

heu oui mais ca n'est pas forcément une trés bonne idée...
imagines tu as une List qui contient 10.000 objets, il faudrait parser toute la liste pour mettre chaque objet à null, ca va être trés lent! :ouch:  

non, et puis tu fous la liste à null, et hop.
de toutes façons, effectivement ça ne sert pas à grand chose de faire ça. si tu codes proprement ça doit etre rarement necessaire....


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 18-05-2004 à 19:40:07    

merci bien, je vais le mettre à null.
Faut-il que j'appelle la Garbage Collector (system.gc() ou elle est appellée tte seule) ?
Pour mettre à null mon objet, je dois faire : monInstance = (montype)null ?
 
Merci
++

Reply

Marsh Posté le 18-05-2004 à 19:41:01    

PAs la peine d'appeller le GC, normalement, il se débrouille très bien tout seul.
Sinon, monInstance = null suffit.

Reply

Marsh Posté le 18-05-2004 à 19:44:14    

merci, je testerais demain à la fac
++

Reply

Marsh Posté le 18-05-2004 à 19:46:17    

ohan a écrit :


Faut-il que j'appelle la Garbage Collector (system.gc() ou elle est appellée tte seule) ?


non seulement tu n'a pas besoin de l'appeler, mais c'est en plus fortement déconseillé, sauf cas particulier

Reply

Marsh Posté le 18-05-2004 à 19:46:17   

Reply

Marsh Posté le 18-05-2004 à 22:59:22    

ouuaip j'avais lu un article d'IBM là dessus sur developerworks...le gars recommandait de pas toucher au GC


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 19-05-2004 à 09:14:58    

lorill a écrit :

non seulement tu n'a pas besoin de l'appeler, mais c'est en plus fortement déconseillé, sauf cas particulier


ok mais c'est quoi les cas particuliers (juste pour info)?

Reply

Marsh Posté le 19-05-2004 à 11:30:08    

De toute façon, mettre les références à null ne garantie pas que le garbage collector va détruire les objets associés.
Si ton appli n'a pas besoin de plus de mémoire, tes objets ne seront détruis qu'à la fermeture de l'application.

Reply

Marsh Posté le 19-05-2004 à 11:32:54    

ben le problème avec System.gc(), c'est que ca lance un garbage collector global, ca va donc prendre beaucoup plus de temps que si tu avais laissé la JVM gérer toute seule (il y a plusieurs niveaux de garbage collector)

Reply

Marsh Posté le 19-05-2004 à 13:03:47    

Exact, si Java, possède un mécanisme de gestion automatique de la mémoire, c'est pas pour qu'on essai de gérer lé mémoire nous même. Si pour toi la gestion mémoire est très critique, il vaut mieux faire ça en C++ ou Delphi ou tout autre langage non géré.
 
Le code géré a ses avantages et ses inconvénients comme toute chose  :D

Reply

Marsh Posté le 19-05-2004 à 15:43:38    

ohan a écrit :

ok mais c'est quoi les cas particuliers (juste pour info)?

quand l'utilisateur a le dos tourné : au moment de la mise en veille, ou en fin de traitement bloquant l'application. Si on sait que ça vaut le coup.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 15:53:34    

nraynaud a écrit :

quand l'utilisateur a le dos tourné : au moment de la mise en veille, ou en fin de traitement bloquant l'application. Si on sait que ça vaut le coup.

tain, il faut webcam + detection de mouvement pour collecter le garbage, pas étonnant qu'on dise que java soit lent [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 20-05-2004 à 01:19:48    

the real moins moins a écrit :

tain, il faut webcam + detection de mouvement pour collecter le garbage, pas étonnant qu'on dise que java soit lent [:itm]


 
 :lol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed