cs_Nisnor
Messages postés48Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention 9 mars 2007
-
13 août 2006 à 13:16
cs_Nisnor
Messages postés48Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention 9 mars 2007
-
14 août 2006 à 20:49
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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 13 août 2006 à 17:02
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.
cs_Nisnor
Messages postés48Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention 9 mars 2007 14 août 2006 à 19:37
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
cs_Nisnor
Messages postés48Date d'inscriptiondimanche 5 mars 2006StatutMembreDernière intervention 9 mars 2007 14 août 2006 à 20:49
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)