Gestion de la mémoire

Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005 - 18 oct. 2004 à 12:39
katykatou Messages postés 3 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 20 février 2010 - 17 févr. 2007 à 18:35
Pimousse : débutant en java

Bonjour,

Mon problème est le suivant :

J'aimerais savoir de quelle façon on est censés gérer la mémoire en java. Normallement c'est la VM qui se charge de tout, et le garbage collector passe régulièrement pour garbagecollecter et tout va bien dans le meilleur des mondes.

Mais si en allant voir dans le gestionnaire de windows on se rend compte que la mémoire ne se libère pas au fur et à mesure (que l'on supprime des JPanel par exemple :D), existe t'il un moyen "propre" de détruire un objet (un JPanel au hasard :D).

Parcequ'il me semble que la méthode finalize() ca fait dresser les cheveux sur la tête des javaïstes chevronnés, et en plus je viens d'essayer et ça marchait même pas !! En faisant finalize() sur le JPanel la mémoire ne se libérait pas...

La méthode propre consiste t'elle donc à s'assurer que tous les liens vers ce JPanel ont été détruits ? (Faire confiance au garbage collector). Ou y'a t'il une autre méthode ?

Dans le premier cas, mon deuxième problème est le suivant :

J'ai ajouté un JPanel dans un CardLayout avec la méthode add( new Carte() );

Donc aucune référence vers cette carte à priori. Dans ma méthode fermerProprement(), je fais appel à ma méthode supprimerCarte(JPanel carteASuppr) qui se contente de faire un remove (comme j'avais fait le add).

Ca marche bien au niveau de l'application, pas de probleme la carte a bien disparu, je passe sur celle d'après etc, magnifique...

Mais c'est ces centaines de Ko que je ne vois pas disparaitre du gestionnaire de tâches qui m'énervent. Ou peut il bien y avoir une autre référence à ce JPanel ?

Merci d'avance,

Thibaut

6 réponses

cs_freax Messages postés 32 Date d'inscription vendredi 29 novembre 2002 Statut Membre Dernière intervention 27 avril 2005
18 oct. 2004 à 15:38
Runtime.getRuntime().freeMemory();

Runtime.getRuntime().gc();

et utilise las proprieter dispose();

De toutes facon, l'on meut un jour
Ce qui nous reste a faire c trouver kan ...
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
18 oct. 2004 à 16:50
D'après ce que j'ai lu et ce que je sais (ou crois savoir) :

freeMemory() ca permet de savoir combien de mémoire il reste de libre... Donc rien à voir.

gc() : l'appel explicite au garbage collector est inutile s'il reste des liens vers un objet, donc on en revient à mon problème.

dispose() ne concerne que les window et classes dérivées, or JPanel ne dérive pas de Window mais de Component.

Merci quand même,

même joueur joue encore ;)

D'autres idées ?

P.S: En ce qui concerne "savoir quand on va mourir", là j'ai une réponse en l'occurence :

"Quand je fais System.exit(0);" ;)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
18 oct. 2004 à 18:41
GodConan :clown)

et bien tu met tes reference a null et tu fait ton appell au gc ...
Une reference a null ;o) ca libere forcement l objet referencé ;o)...

++
0
Pimousse77 Messages postés 42 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 6 janvier 2005
19 oct. 2004 à 10:25
Vi donc on en revient à ce que je disais :
Il faut être sûr de ne pas avoir oublié une seule référence !

Mais au fait, si on ne fait pas d'appel explicite au garbage collector, il passe régulièrement ou bien c'est aléatoire ? Comment ca se passe ? Y'a un cycle ou c'est quand la mémoire commence à manquer ?

Merci encore,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
19 oct. 2004 à 18:22
GodConan :clown)

euuhhh mais c koi ton prob exactement ??!!!
me di pas que tu as 200 ref sur la meme instance!!!
si c est le cas corrige ;o) et utilise comme cela est preconisé ;o)
des methode "get" .... ;o) et tu seras plus tranquill ;o)

pour ce qui est du comportement gc ;o) cela depend des jvm
et rapelle toi en informatique ;o) rien n est aleatoire... ;o)
(la meilleur source d info c sun pour ce genre de question)

++
0
katykatou Messages postés 3 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 20 février 2010
17 févr. 2007 à 18:35
salut s'il vous plait j'ai besoin d'un code écrit en java d'un simulateur animé de mémoire centrale en indiquant juste les processus évidemment et les stratégies d'allocations(best fit, worst fit, first fit) sans entrer dans les détails de la pagination. j'ai un projet et je voudrais bien qu'on m'aide car je suis une débutante en java alors si vous avez une idée svp n'hésiter pas merci

katy
0
Rejoignez-nous