La fuite mémoire en java cela se résous à coup de nullification sur les objets de longue durée
Je sais pas pourquoi tu as cette idée fixe :-( en tête mais en Java, il n'y a pas besoin de mettre à null les références pour que la mémoire soit désallouée. Comme le signale Barret Michel plus haut, si tu as besoin de faire ça, c'est que tu as un sérieux problème de conception dans ton application.
Ce genre de truc est totalement inutile en Java, par exemple :
int maMethode {
Graph bidule = new Graph();
// Faire des opérations sur bidule
bidule = null; // Cette ligne ne sert à rien, bidule
// sera désalloué à la fin de la méthode, même si
// c'est une structure de données récursive (ou profondément linkée
// comme tu dis). Il n'y pas besoin d'écrire de destructeur
// dans la classe graphe pour détruire les nœuds.
return result;
}
Si tu as des fuites mémoire en Java, c'est que tu gardes des références sur des des choses qui ne servent plus. Dans ce cas, tu as un problème de conception de ton application et la solution c'est pas de nullifier n'importe comment mais de revoir ton architecture. Un programme Java correctement fichu n'a pas besoin de « nullification » systématique.
Après, oui, un full GC bloque l'application. Mais il ne faut pas exagérer la durée d'un full GC non plus (en ~1seconde, on doit nettoyer au moins 1GB de tas) ni sa fréquence (ça n'arrive pas toutes les 1 seconde...)
[^] # Re: la réponse est évidente
Posté par X345 . En réponse au journal [Trolldi] Le langage plus approprié pour écrire des applications graphiques multiplateformes. Évalué à 2. Dernière modification le 28 octobre 2013 à 14:20.
Je sais pas pourquoi tu as cette idée fixe :-( en tête mais en Java, il n'y a pas besoin de mettre à null les références pour que la mémoire soit désallouée. Comme le signale Barret Michel plus haut, si tu as besoin de faire ça, c'est que tu as un sérieux problème de conception dans ton application.
Ce genre de truc est totalement inutile en Java, par exemple :
Si tu as des fuites mémoire en Java, c'est que tu gardes des références sur des des choses qui ne servent plus. Dans ce cas, tu as un problème de conception de ton application et la solution c'est pas de nullifier n'importe comment mais de revoir ton architecture. Un programme Java correctement fichu n'a pas besoin de « nullification » systématique.
Après, oui, un full GC bloque l'application. Mais il ne faut pas exagérer la durée d'un full GC non plus (en ~1seconde, on doit nettoyer au moins 1GB de tas) ni sa fréquence (ça n'arrive pas toutes les 1 seconde...)