éviter les fuites mémoires et la gestion de la durée de vie d'un objet,
faciliter la création et le partage d'objet sans se soucier de sa libération,
optimiser l'utilisation des blocs mémoire.
Durée de vie d'un objet JAVA
A tort ou à raison, la plupart des langages ont adopté ce principe. En plus du role formateur d'une allocation manuelle, un create - destroy permet d'avoir un controle absolu sur les objets de son application.Voici un exemple ou le ramasse-miette est un obstacle.
Prenons un JFrame sur lequel on ajoute un composant JPanel affichant une image
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
this.imagePanel = new JImagePanel("c:monimage.png");
this.imagePanel.setStretch(false);
this.imagePanel.setBounds(10, 10,200,200);
this.add(imagePanel);
this.imagePanel.repaint();
this.pack();
}
Comment supprimer imagePanel pour y créer un autre JPanel à la place ???
private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
this.imagePanel.free;
this.imagePanel.destroy;
}
Réponse: cannot find symbol method free() !!!
Appeler implicitement le Garbage Collector
Dans le finalize() de chaque class, toutes les variables qui ne sont plus utilisées sont automatiquement libérées avec l'instruction System.gc().Pour supprimer un objet, nous allons utiliser le même principe:
retirer l'objet de son parent avec remove,
effacer le contenu de la variable,
lancer le Garbage Collector pour 'ramasser les miettes' qui ne sont plus utilisées en mémoire.
private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
this.remove(imagePanel);
this.imagePanel = null;
System.gc();
//control visuelle avec this.repaint();
// this.imagePanel est supprimé et peut à nouveau ętre utilisé
this.imagePanel = new JImagePanel("c:\monimage.png");
...
}
Avec cette méthode, il est possible de supprimer l'objet puis d'utiliser le pointeur sur un nouvel objet. Le garbage collector libère automatiquement les composants qui ne sont plus utilisés. Personnellement, je préférais la gestion de la mémoire à la mano qui permettait d'avoir un controle complet sur la durée de vie de ses composants.