Y-t-il un design pattern qui permette d'éviter au maximum les fuites mémoire
je souhaite fermer une fenêtre et éliminer toutes les ressources qui y corresponde (donc les JMenu, Clipboard, JDialog, *Listener) sans quitter l'application (pas de System.exit()).
Pour ce faire, j'essaie de mettre toutes les références à null, j'appelle le garbage_collector, ...
Mais lorsque je profile mon application avec tptp, je remarque qu'il existe encore des références vivantes.
Donc, je me demande si il existe un pattern qui pourrait m'aider.
Ci-dessous le code qui est censé libérer mes ressources.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public void clear_all() {
System.gc();
client.attToNull();
jpanel.attToNull();
scroll.attToNull();
jmenu.attToNull();
mouse.attToNull();
logO.attToNull();
jframe.dispose();
commandes.clear();
jframe = null;
client = null;
jpanel = null;
scroll = null;
jmenu = null;
mouse = null;
logO = null;
jframe = null;
commandes = null;
System.gc();
byte[] j;
/*
* J'ai rajouter ce code pour le test.
* Forcer le gc à passer et vérifier que les références sont
* annulées
*/
for (int i = 0; i < 100; i++) {
j = new byte[40 * 1000 * 1000];
} |
client, jpanel, scroll... ont chaquns une méthode attToNull qui met tous leurs attributs à null.
Exemple pour scroll.
Code:
1 2 3 4 5 6 7 8 9 10
|
public class ScrollConsole extends JScrollBar {
private PanelConsole panel;
private LogOriginal logO;
public void attToNull() {
panel = null;
logO = null;
}
.... |
:aie: