Bonjour,

Cela faisait quelques temps que je n'étais pas venu poser des questions tatillonnes sur ce forum, me revoici donc à la charge.

Aujourd'hui, je m'intéresse au problème de libération de la mémoire occupée par les objets Java.

Hypothèse de base : à partir d'un certain moment, je sais que les objets que j'utilise dans mon code ne seront plus utilisés.

Proposition : je me demande si la création de l'interface ci-après est viable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public interface Destroyable {
	/**
         * Provoque la fermeture de toutes les ressources utilisées par l'objet et la libération de ces ressources.
         * <strong>Après l'appel de la méthode <code>destroy</code>, l'objet ne doit plus être utilisé.</strong>
         */
	void destroy();
}
L'idée serait qu'à partir du moment où je n'ai plus besoin de l'un de mes objets, je fais appel à la méthode destroy, de sorte de minimiser l'occupation mémoire réelle de mon application.

Exemple de classe "Destroyable" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MaClasse {
	private Map<Object, Integer> map;
	private StringBuilder stringBuilder;
	private Destroyable destroyableObject;
 
	[...]
 
	public void destroy() {
		// Propagation
		destroyableObject.destroy();
 
		// Et nettoyage de l'objet
		destroyableObject = null;
		map.clear();
		map = null;
		stringBuilder = null;
	}
}
Sur le papier, ça a l'air bien, mais voila que PMD vient râler :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Assigning an Object to null is a code smell. Consider refactoring.
D'où mes questions :
- est-ce que quelqu'un a déjà expérimenté un mécanisme similaire ?
- Est-ce qu'il peut permettre d'optimiser la gestion de la mémoire, ou bien est-il complètement inutile car déjà implémenté par le Garbage Collector ?

Merci d'avance

Junta