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 :
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.Code:
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(); }
Exemple de classe "Destroyable" :
Sur le papier, ça a l'air bien, mais voila que PMD vient râler :Code:
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; } }
D'où mes questions :Code:Assigning an Object to null is a code smell. Consider refactoring.
- 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

