[Java] Détruire une image

Détruire une image [Java] - Programmation

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.

Reply

Marsh Posté le 28-02-2002 à 13:43:35   

Reply

Marsh Posté le 28-02-2002 à 13:54:40    

tu peux appeler la méthode finalize() de l'objet


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

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.


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 28-02-2002 à 13:55:56    

jupiler a écrit a écrit :

tu peux appeler la méthode finalize() de l'objet  




 
 :??:  
 
 :non:  :non:  :non:


---------------
What is popular is not always right, what is right is not always popular :D
Reply

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.

Reply

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!


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 28-02-2002 à 16:20:29    

est-ce-que qq'un a d'autres suggestions?

Reply

Marsh Posté le 28-02-2002 à 16:55:08    

ca ne marche pas ce que je t'ai proposé ?


---------------
What is popular is not always right, what is right is not always popular :D
Reply

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...

Reply

Marsh Posté le 28-02-2002 à 17:37:06    

si t'as pas une bonne architecture  :sarcastic:  
 
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.


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 28-02-2002 à 17:37:06   

Reply

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...

Reply

Marsh Posté le 01-03-2002 à 08:44:55    

merci :) Je vais regarder ça...

Reply

Marsh Posté le 01-03-2002 à 09:46:35    

:heink:


---------------
Just because you feel good does not make you right
Reply

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é).


---------------
Just because you feel good does not make you right
Reply

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  :??:  :??:

Reply

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]


---------------
Just because you feel good does not make you right
Reply

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]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

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