Qu'est-ce qu'un cas d'utilisation pour une référence logicielle en Java?


Qu'est-ce qu'un cas d'utilisation pour une référence douce en Java? Serait-il utile de collecter des éléments non critiques lorsqu'une JVM est à court de mémoire afin de libérer suffisamment de ressources pour peut-être vider des informations critiques avant d'arrêter la JVM?

Sont-ils appelés soft-references dans ils ils sont doux et se cassent quand "mis sous stress" c'est-à-dire:la JVM a manqué de mémoire. Je comprends les références faibles et les références fantômes mais pas vraiment quand celles-ci seraient nécessaires.

Author: Michael Myers, 2010-03-11

4 answers

Une utilisation est pour la mise en cache. Imaginez que vous souhaitiez maintenir un cache en mémoire de gros objets mais que vous ne vouliez pas que ce cache consomme de la mémoire qui pourrait être utilisée à d'autres fins (car le cache peut toujours être reconstruit). En maintenant un cache de références logicielles aux objets, les objets référencés peuvent être libérés par la JVM et la mémoire qu'ils occupaient réutilisée à d'autres fins. Le cache aurait simplement besoin d'effacer les références logicielles brisées lorsqu'il les rencontre.

Une autre utilisation peut être destiné à maintenir des images d'application sur un dispositif à contrainte de mémoire, tel qu'un téléphone mobile. Lorsque l'utilisateur ouvre des applications, les images d'application précédentes peuvent être maintenues en tant que références logicielles afin qu'elles puissent être effacées si la mémoire est nécessaire pour autre chose, mais seront toujours là s'il n'y a pas de demande de mémoire. Cela permettra à l'utilisateur de revenir à l'application plus rapidement si il n'y a pas de pression sur la mémoire et permettre à l'application précédente de la mémoire pour être récupérée si elle est nécessaire pour que quelque chose d'autre.

 17
Author: Paul Ruane, 2010-03-10 23:49:35

Cet article m'a donné une bonne compréhension de chacune d'elles (références faibles, douces et fantômes). Voici une citation résumée:

Une référence faible , en termes simples, est une référence qui n'est pas assez forte pour forcer un objet à rester en mémoire. Les références faibles vous permettent de tirer parti de la capacité du garbage collector pour déterminer l'accessibilité pour vous, vous n'avez donc pas à le faire vous-même.

Un référence douce{[13] } est exactement comme un faible référence, sauf qu'il est moins désireux de jeter l'objet auquel il se réfère. Un objet qui n'est que faiblement accessible (les références les plus fortes sont WeakReferences) sera supprimé au prochain cycle de récupération de place, mais un objet qui est doucement accessible restera généralement pendant un certain temps.

Une référence fantôme est très différente de SoftReference ou WeakReference. Son emprise sur son objet est si ténue que vous ne pouvez même pas récupérer l'objet its sa méthode get() renvoie toujours null. La seule utilisation d'une telle référence est de garder une trace du moment où elle est mise en file d'attente dans un ReferenceQueue, car à ce stade, vous savez que l'objet vers lequel elle pointait est mort.

 16
Author: BalusC, 2010-03-10 23:56:58

Le meilleur exemple auquel je puisse penser est un cache. Cela ne vous dérangerait peut-être pas de vider les entrées les plus anciennes dans le cache si la mémoire devenait un problème. La mise en cache de grands graphiques d'objets peut également rendre cela probable.

 3
Author: duffymo, 2010-03-10 23:48:40

Un exemple de la façon dont une SoftReference peut être utilisée comme cache peut être trouvé dans ce post.

 0
Author: Peter Fortuin, 2012-05-16 10:40:13