Désallouer une image

Résolu
cs_thespartan Messages postés 36 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 26 mai 2008 - 6 nov. 2007 à 10:11
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 6 nov. 2007 à 11:58
Bonjour. Je crée une image de cette façon : image = Image.createImage(X , Y); Seulement cette ligne est dans une boucle donc ça finit par faire beaucoup en mémoire même si ç chaque fois c'est image qui pointe dessus. J'aimerais avant chacque allocation faire une désallocation pour étre sur de pas remplir la mémoire inutilement. Avoir un truc du style :
while(1){
desalloue(source);
 source = Image.createImage(curx,cury);
}
Comment ça se fait en java?

Merci
Spartan

2 réponses

the_wwt Messages postés 177 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 16 janvier 2009 1
6 nov. 2007 à 11:02
Bonjour,
en java il existe le Gorbedge collector (ramasse miettes) qui s'occupe de cela pour toi...
Tu n'as rien a faire, a chaque affectation (ou presque) l'ancienne référence est désaloué.
Cordialement,
Pierrick
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
6 nov. 2007 à 11:58
Salut,

petite précision : le GC ne désaloue l'objet1 que si aucun autre objet ne garde de référence sur l'objet1. Autre point tu peux faire un call explicite sur le GC avec la commande "System.gc();", et si tu as fait du C++ et que tu cherches un équivalent au destructeur C++ en java il te faut surcharger la méthode finalize héritée de la classe Object.

"protected void finalize() throws Throwable"

comme ça tu peux te faire un GC un chouilla plus complet en procédant ainsi (c'est juste une idée vite fait) :

[...]
private static final Runtime RT = Runtime.getRuntime();
[...]
public long usedMem() {
  return RT.totalMemory() - RT.freeMemory();
}
public void gc() {  long mem1 usedMem(), mem2 Long.MAX_VALUE;
  for (int i = 0; (mem1 < mem2) && (i < 250); ++i) {
    RT.runFinalization();
    RT.gc();
    Thread.yield();
    mem2 = mem1;
    mem1 = usedMem();
  }
}
[...]

pour une explication plus détaillée de finalize voir http://www.laltruiste.com/coursjava/gc_finalize.html' target='_blank'>ICI

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
3
Rejoignez-nous