Détruire une image [Java] - Programmation
Marsh Posté le 28-02-2002 à 13:54:40
tu peux appeler la méthode finalize() de l'objet
Marsh Posté le 28-02-2002 à 13:55:08
mettre toute les références de l'image à null et fait System.gc();
Mais bon le gc se lancera quand il l'aura décidé et un appel à System.gc() ne signfie en aucune manière une exécution synchrone du garbage collector.
Pq veut tu faire ca? Je ne suis pas persuadé qu'une simple image te pose autant de problème.
Marsh Posté le 28-02-2002 à 13:55:56
jupiler a écrit a écrit : tu peux appeler la méthode finalize() de l'objet |
Marsh Posté le 28-02-2002 à 14:03:23
Le pb, c'est que j'ai pleins d'images qui se lancent au fur et à mesure, et arrivé au bout de mon applet, c'est très lent (plus de ram).
J'ai déjà essayé : mon_image=null;
System.gc();
Cela ne marche pas, la ram ne bouge pas d'un yota !
Je vais essayer finalize(). Faut faire un truc du genre:
mon_image.finalize(); ?????
Si ça marche pas, y a t-il d'autres solutions ?
Merci.
Marsh Posté le 28-02-2002 à 14:11:34
rufo a écrit a écrit : Le pb, c'est que j'ai pleins d'images qui se lancent au fur et à mesure, et arrivé au bout de mon applet, c'est très lent (plus de ram). J'ai déjà essayé : mon_image=null; System.gc(); |
Tu dois virer TOUTES les références de l'image. Donc si tu passes ton image en référence à d'autre endroit il faut également vérifier ce genre de truc. Le meilleur moyen est d'avoir une méthode qui te renvoit l'image et de mettre cette référence là à null
Logiquement le GC doit se lancer lorqu'il juge que ca commence à etre juste au niveau occupation memoire
Lancer finalize ne fera strictement rien, c'est le gc qui exécute cette méthode lorsqu'il fait un clean de ton objet et pas le contraire!
Marsh Posté le 28-02-2002 à 16:55:08
ca ne marche pas ce que je t'ai proposé ?
Marsh Posté le 28-02-2002 à 17:35:54
darklord22 a écrit a écrit : ca ne marche pas ce que je t'ai proposé ? |
ben c'est pas évident de retrouver toutes les références...
Marsh Posté le 28-02-2002 à 17:37:06
si t'as pas une bonne architecture
Pour ton info, il n'y a pas d'autre solutions. Tant que ton image sera référencée par un des tes objets elle restera en mémoire, point final.
Marsh Posté le 01-03-2002 à 00:41:46
N'appelle pas la méthode finalize() toi même. Le javadoc le dit d'ailleurs explicitement.
Par contres, tu peux la surcharger pour afficher un message du genre "*** FINALIZE ***", qui te permettra de vérifier si le garbage collectore finalize tes objets devenus inutiles. Si tu vois la RAM libre baisser sans qu'aucune image ne soit finalisée, c'est probablement que tu garde un référence à un endroit du code...
Marsh Posté le 01-03-2002 à 09:46:35
Marsh Posté le 01-03-2002 à 09:47:44
au fait dans une applet Java tu sais voir la mémoire occupée et compagnie via la console. Tu peux aussi demander au GC de s'exécuter (à nouveau qd il l'a décidé).
Marsh Posté le 01-03-2002 à 11:38:19
DarkLord a écrit a écrit : au fait dans une applet Java tu sais voir la mémoire occupée et compagnie via la console. Tu peux aussi demander au GC de s'exécuter (à nouveau qd il l'a décidé). |
HA bon ? je pensais qu'en faisant system.gc() ça l'appelait explicitement notre cher garbage collector
Mais alors c quoi l'interet, si il se lance quand yen a besoin ? autant pas mettre l'appel dans ce cas
Marsh Posté le 01-03-2002 à 12:05:47
petoulachi a écrit a écrit : Mais alors c quoi l'interet, si il se lance quand yen a besoin ? autant pas mettre l'appel dans ce cas |
public static void gc()
Runs the garbage collector.
Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects.
--> Tu le pousses un peu à libérer de la mémoire mais il n'est pas dit qu'il le fera de suite après ton appel.
[jfdsdjhfuetppo]--Message édité par DarkLord--[/jfdsdjhfuetppo]
Marsh Posté le 01-03-2002 à 23:08:20
en faite tu dis à la JVM de faire un gros effort pour peut-être, si ca dérange pas trop, lancer le garbage collector incéssament sous peut, dès qu'elle pourra.
[jfdsdjhfuetppo]--Message édité par benou--[/jfdsdjhfuetppo]
Marsh Posté le 28-02-2002 à 13:43:35
Je voudrais savoir comment détruire une image (au cours de l'exécution d'une applet) qui ne sert plus dans une applet java (le but est donc de libérer la ram)? Merci.