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 :
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" :
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 :
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
Partager