Conserver une référence. Si votre objet est collecté prématurément, c'est un symptôme que vous avez un bug dans la conception de votre application.
Le garbage collector recueille uniquement les objets pour lesquels il n'y a aucune référence dans votre application. S'il n'y a aucun objet qui référencerait naturellement l'objet collecté, demandez-vous pourquoi il devrait être maintenu en vie.
Une utilisation dans laquelle vous n'avez généralement aucune référence, mais qui souhaite conserver un objet est un singleton. Dans ce cas, vous pouvez utiliser une variable statique. Une mise en œuvre possible d'un singleton ressemblerait à ceci:
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqInstance;
}
}
Edit: Techniquement, vous pouvez stocker une référence quelque part dans votre finaliseur. Cela empêchera la collecte de l'objet jusqu'à ce que le collecteur détermine à nouveau qu'il n'y a plus de références. Le finalizer ne sera cependant appelé qu'une seule fois, vous devez donc vous assurer que votre objet (y compris ses superclasses) n'a pas besoin d'être finalisé après la première collecte. Je vous conseille cependant de ne pas utiliser cette technique dans les programmes actuels. (Il laissera des collègues comme moi crier WTF !?;)
protected void finalize() throws Throwable {
MyObjectStore.getInstance().store(this);
super.finalize(); // questionable, but you should ensure calling it somewhere.
}
S'il vous plaît fournir certains extraits de code –
Rahul, vous dirigeaient « S'il vous plaît fournir des extraits de code » vers quelqu'un en particulier, ou étaient Voulez-vous mettre à jour les exigences de votre question? –
Hey j'ai mis à jour mes questions –