mdrcedrick
Messages postés54Date d'inscriptiondimanche 12 septembre 2004StatutMembreDernière intervention22 novembre 2007
-
9 juil. 2007 à 14:27
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 2012
-
10 juil. 2007 à 15:45
bonjour
sur mon application j'ouvre régulièrement des petites JFrame qui
contiennent des JLabel JTextField JButton, rien de bien complexe
par ailleur je lance en même temps une petite appli que j'ai trouvé et qui montre dans un graphique la consommation de mémoire
donc lorsque je lance une de ces petites JFrame ma conso mémoire
augmente c'est normal ... or lorsque je ferme la fenêtre je remet
toutes les déclarations à null et je lance le garbage collector
derrière et je fais un dispose() ensuite pour fermer cette fenetre.
cependant celà fait une demie-heure que je laisse tourner le graph pour
voir la diminution de la mémoire mais elle n'arrive pas !
est-ce que je fais quelque chose de la mauvaise manière afin de la libérer de la mémoire
car hier j'ai lancé 10 fenetres différentes et je suis vite arrivé à une pénurie de mémoire
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 9 juil. 2007 à 21:35
ok, je croyais que si on forçais le GC, il faisait son boulot jusqu'au bout, mais c'est vrai que pour des raisons d'optimisations, cela peut se comprendre !
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 9 juil. 2007 à 14:44
Utilise tu une connection à une base de données ? Accède tu à des fichiers ? Ou utilise tu tout autres ressources qui nécessite d'être fermées à la main ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 9 juil. 2007 à 15:01
montre voir ton code de fermeture de tes resultset, de statement et de connection.
Sinon, essaye de voir avec un outil de profiling pour voir qu'est-ce qui te provoque cette fuite mémoire (mais à première vue, je dirais que ca vient de la base de données : faut être hyper rigoureux avec ces fichues bases!)
Vous n’avez pas trouvé la réponse que vous recherchez ?
JOptionPane.showMessageDialog (null, "Impossible de
se connecter à la base de données\nVeuillez vérifier son état",
"Erreur", JOptionPane.ERROR_MESSAGE);
}
//création de l'ordre SQL
try
{
ordreMySQL = connectMySQL.createStatement();
}
catch (SQLException aSQLE)
{
JOptionPane.showMessageDialog (null, "Impossible de
créer l'ordre SQL\n" + aSQLE.getMessage (), "Erreur",
JOptionPane.ERROR_MESSAGE);
}
// Lecture des résultats d'un ordre SQL
try
{
resultat =
ordreMySQL.executeQuery ("select PRODUIT, MARQUE, MODELE, NUMERO,
PRIX_HT, QUANTITE, VENDEUR, PAGE, LIGNE from INVENTAIRE where ID='" +
this.idEffacer + "'");
}
catch (SQLException aSQLE)
{
JOptionPane.showMessageDialog (null, "Echec lors de
l'exécution de l'ordre SQL\n" + aSQLE.getMessage(), "Erreur",
JOptionPane.ERROR_MESSAGE);
}
// Obtention des résultats
try
{
métaOrdre = resultat.getMetaData ();
while (resultat.next())
{
for (int colonne = 1; colonne <=
métaOrdre.getColumnCount (); colonne++)
JOptionPane.showMessageDialog (null, "Echec lors de
la lecture des résultats\n" + aSQLE.getMessage(), "Erreur",
JOptionPane.ERROR_MESSAGE);
}
//fermeture de la connexion
try
{
connectMySQL.close ();
}
catch (SQLException aSQLE)
{
JOptionPane.showMessageDialog (null, "Erreur
lors de la fermeture de la connexion à la base de données\n" +
aSQLE.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 9 juil. 2007 à 19:22
il n y a aucun soucis à mes yeux ;o)
la JVM s alloue de la memoire a concurrence de 64Mo (pas tout a fait sur du nombre exacte) et elle descide qd elle veux (algo compliqué ;o) ) de la libérer mais en fait cela au yeux du programe car elle la conserve au regard de l os pour en disposer plus rapidement la foie suivante cela fait parti des obtimisations... ;o) il te faut couper la jvm pour recupérer la memoire
ensuite pour ce qui est des "close" et bien normalement la fermeture de la connection entraine la fermeture des result et statement ;o) cependant ;o) cela reste une bonne habitude ;o) de les fermer explicitement pour assurer la bonne structure des methodes et class ....
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 9 juil. 2007 à 21:29
NON ... ;o) justement l astuce reside la .. ;o) cela coute chere en temps de demander des aloc à l OS donc la JVM ne libere pas systematquement la memoire pour pouvoir la réutiliser à volonté sans demander à l OS ...
la limite par defaut est de 64 Mo pour l application
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 10 juil. 2007 à 15:43
Bon ben tu n as pas compris en fait ;o) ....
Qu importe que tu en ouvres une nouvelle ou pas ;o) .... au bout du compte si tu fait des dispose ou des "déreferencements" ;o) la memoire occupé finira par se stabiliser...
ceci dit ;o) on peut facilement exploser la memoire ;o) avec l affichage d images... ;o)
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 10 juil. 2007 à 15:45
Et pour rebondir sur ton dernier mesage ... il vaut mieu rafraichir son contenu plutot que de le changer .. ;o)
et donc faire dependre son contenu de certaine variable...