Publié le 21/07/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
1 commentaires

Liberer immediatement un object avec le Garbage Collector

Le Garbage Collector, aussi appelé ramasse-miette, prend en charge les opérations d'allocation et de libération de mémoire. Ce mécanisme automatique apporte plusieurs avantages aux développeurs :
é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.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar l'indik

Publié par l'indik

le 21/08/2012 à 10:20:39

Sauf que si l'objet n'est plus utilisé, quand tu fait ton new , la mémoire sera automatiquement libéré si cela est nécessaire. Donc l'utilisation de System.gc() n'est pas très utile ici... (et si ton but est d'explicitement enlever l'objet de la mémoire, System.gc() ou pas, dans tous les cas, tu ne sauras même pas quels objets sont retiré de la mémoire, vu qu'elle est vidé partiellement).

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - tutorial
Mise a jour
21/07/2010
Visualisation
vu 3702 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par jerome dans php5

Excellente classe, merci pour ce petit code qui va me permettre de me passer de ma page igoogle qui ferme vendredi

Publié par Franzi dans java

Bonjour,
Le code est simple et compile, après être entré dans public void connect, il n'effectue pas this.session.get.transport et s'arrête. Sous eclipse avec Tomcat, j'ob...

Publié par eldiablo dans java

Après recherches, il manquait simplement une ligne à cette classe et à la mienne. Il suffit d'ajouter
df.setLenient(false);
juste après
SimpleDateFormat df = new...

Publié par Etiazam dans php5

Si je peux me permettre, il manque l'incrementation dans les deux boucles, telles qu'elles sont presentees elles font tourner le navigateur en rond, il faut donc ajouter
for ($x=0;$x<50;$x...

Publié par Fobec dans news

Bonjour,
la localisation des adresses ip utilise plusieurs algo de recherche de position geographique. La precision du rapport d'analyse correspond la qualite de la localisation:
9/10 la locali...