96 votes

Avez-vous déjà utilisé la référence Phantom dans un projet?

La seule chose que je sais à propos de phanom de référence est,

  • si vous utilisez son get() la méthode qu'il retournera toujours la valeur null, et non pas de l'objet. [ alors qui est l'utilisation de celui-ci ]
  • En utilisant fantôme de référence vous assurer que l'objet ne peut pas être ressuscité de finaliser la méthode;

Mais qu'est-ce que l'utilisation de ce concept de classe? Avez-vous déjà utilisé dans tous de votre projet, ou avez-vous un exemple où l'on devrait l'utiliser? Ou est ce concept fait seulement pour une entrevue point de vue ;)

52voto

Peter Kofler Points 4421

J'ai utilisé Fantôme de références dans un simpliste, très spécialisés, type de mémoire profiler pour surveiller la création et destruction d'objets. J'ai besoin d'eux pour garder une trace de la destruction. Mais l'approche est obsolète. (Il a été écrit en 2004 ciblage J2SE 1.4.) Professionnel des outils de profilage sont beaucoup plus puissant et plus fiable et la plus récente de Java 5 fonctionnalités comme JMX, des agents et des JVMTI peut être utilisé pour cela.

PhantomReferences (toujours utilisé avec la Référence de la file d'attente) sont supérieurs aux finalize qui a quelques problèmes et doit donc être évitée. Principalement fait d'objets accessible à nouveau. Cela pourrait être évité avec le finaliseur tuteur idiome (-> lire la suite dans "Effective Java"). Donc, ils sont aussi le nouveau finaliser.

De plus, un fantôme références

vous permettre de déterminer exactement quand un objet a été supprimé de la mémoire. Ils sont, en fait, la seule façon de le déterminer. Ce n'est pas, généralement, que utile, mais pourraient vous être utiles dans certaines circonstances très particulières comme la manipulation d'images de grande taille: si vous êtes sûr qu'une image doit être les ordures collectées, vous pouvez attendre jusqu'à ce qu'il est réellement, avant de tenter de charge l'image suivante, et donc de la redoutable OutOfMemoryError moins probable. (Cité par enicholas.)

Et comme le psd a écrit le premier, Roedy Vert a un bon résumé de références.

16voto

shevchik Points 6781

Grande explication de Fantôme de Référence d'utilisation:

Phantom références sont le moyen de savoir qu'un objet a été supprimé de la mémoire. Par exemple, considérons une application qui traite avec de grandes images. Supposons que nous voulons charger une image en mémoire lors de la grande image est déjà dans la mémoire qui est prêt pour les ordures ménagères collectées. Dans de tels cas, nous voulons attendre jusqu'à ce que l'ancienne image est recueillie avant de charger une nouvelle. Ici, le fantôme de référence est flexible et sécuritaire de l'option à choisir. La référence de la vieille image sera mis en file d'attente dans le ReferenceQueue une fois la vieille image de l'objet est finalisé. Après la réception de cette référence, nous pouvons charger la nouvelle image dans la mémoire.

13voto

Tan Hui Onn Points 161

J'ai trouvé un cas d'utilisation pratique et utile de PhantomReference qui est org.apache.commons.io.FileCleaningTracker dans le projet commons-io. FileCleaningTracker supprimera le fichier physique lorsque son objet marqueur est nettoyé.
Il convient de noter la classe Tracker qui étend la classe PhantomReference .

2voto

Il est courant d'utiliser WeakReferencePhantomReference est plus approprié. Cela permet d'éviter certains problèmes de pouvoir de ressusciter les objets après un WeakReference est effacé/file d'attente par le garbage collector. Généralement, la différence n'a pas d'importance parce que les gens ne jouent pas idiot encule.

À l'aide de PhantomReference a tendance à être un peu plus intrusive parce que vous ne pouvez pas prétendre que l' get méthode fonctionne. Vous ne pouvez pas, par exemple, écrire un Phantom[Identity]HashMap.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X