Recherche un tuto, une aide etc...pour gérer la mémoire [Résolu]

Signaler
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007
-
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007
-
Salut tout le monde...
Je fais un petit truc en java depuis un moment et je n'en suis qu'au début car je bloque sur un point : La gestion de la mémoire consommée...
Pour le moment, l'application se résume a une fenetre sans les bordures Windows dans laquelle il y a deux champs, deux label et deux bouton pour faire un petit panneau de connexion a un jeu. Le lancement de cette fenetre prend un total de 27-29Mo de mémoire virtuelle...Lorsqu'on clique sur le bouton "Connexion", ça ferme la fenetre et logiquement ça devrait libérer de la mémoire (suite a une lecture d'une petite aide face aux "fuites de mémoires" comme ils disent, j'utilise les méthode remove() (adaptées aux objets bien sur) afin d'enlever les éléments racollés entre eux avant de les déclarer null puis d'invoquer le GC)...Et comble de malheur, a default de me faire perdre meme quelque Ko de mémoire, ça me fait gagner quelques Mo et l'application en théorie "morte" (objets détruit(??) et fenetre définie comme non visible puis détruite(??)) prend alors 31Mo de mémoire virtuelle....

Je cherche donc un moyen  n'importe quoi (tuto, explication, bout de code...) pour éliminer ces fichues fuites de mémoires pour perdre des Ko( Mo??!!) quand je détruit un objet et non pas en gagner...

Une suggestion?
Merci à tous pour votre patiente et vos réponse éventuelles

4 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
115
en java, tu n'a pas vraiment de fuite mémoire puisque tu as un garbage collector. Par contre, l'inconvénient du garbage collector, c'est que tu ne sais pas quand est-ce qu'il intervient (enfin si, tu le sais puisqu'il intervient dès que ton application vient à manquer de mémoire...).
Donc c'est logique que ta mémoire consommée augmente, si tu as bien fait les choses (passage de tes références d'objets à null), dès que le garbage collector se déclenchera, tu récupèrera la mémoire consommée par ta feuille.

C'est un des défauts des langages dont la mémoire est managée par un garbage collector : JAVA ou .NET par exemple.
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Autre solution-->
Etre un peu moins distrait et remarquer quand j'instancie un driver MySQL sans le détruire par la suite ^^...
Ca m'évitera des étonnement...Et en enlevant le système de connexion à la BDD, effectivement ça me fait gagner 6Mo (27Mo passe à 21Mo) de mémoire virtuelle au lieu de m'en faire perdre 2Mo supplémentaire :D
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
115
A ca c'est sûr que si tu garde la connexion à une base de données ouverte, la mémoire grimpe... ;)
Messages postés
48
Date d'inscription
dimanche 5 mars 2006
Statut
Membre
Dernière intervention
9 mars 2007

Et justement a ce sujet....:D
La connection ok elle est fermée mais....Ce qui reste en mémoire c'est l'instance du driver JDBC pour MySQL....
Et je n'ai pas trouvé de moyen pour le détruire...
Pour le créer je fais comme ça-->
Class.forName("com.mysql.jdbc.Driver").newInstance();

mais détruire cet objet comment on procède?...(Ce qui me prend de la place inutilement après destruction de la fenetre c'est surtout cette ligne en réalité :D)

Merci pour vos réponse ;)