cs_thespartan
Messages postés36Date d'inscriptionsamedi 3 février 2007StatutMembreDernière intervention26 mai 2008
-
6 nov. 2007 à 10:11
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 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?
the_wwt
Messages postés177Date d'inscriptionjeudi 5 octobre 2006StatutMembreDernière intervention16 janvier 20091 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
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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();
}
}
[...]