2010-10-03 1 views
2

J'ai un cache construit à partir d'un Map vers SoftReferences. Quand ils sont ajoutés, ils sont placés dans une autre file d'attente pour être compressés par gzip ou quelque chose comme ça. Mon idée est la suivante: je veux avoir WeakReferences pour les objets dans la file d'attente compressée, de sorte que lorsque la tâche compresseur arrive à l'objet, si elle est déjà partie, nous n'avons pas besoin de la compresser. Ne gardez pas les objets vivants qui seraient autrement GC'd. Donc s'il y a exactement un SoftReference et un WeakReference, la sémantique de SoftReference s'applique-t-elle encore?GC va-t-il collecter un objet référencé par un SoftReference et un WeakReference?

+0

GCC? Je pense que vous voulez simplement dire GC, quand la plupart des gens voient GCC, ils pensent à la collection du compilateur Gnu. – mikerobi

+0

ha ha, je veux dire que. Il est tard; Merci. – gubby

Répondre

3

Oui, la sémantique de SoftReferences s'applique toujours: SoftReferences est plus forte que WeakReferences.

Les références faibles sont fondamentalement traitées comme non existantes pour le GC. Ainsi, un objet qui n'est que faiblement accessible peut être GCed immédiatement. Les objets accessibles seulement par un SoftReferences comme le type le plus fort, cependant, sont seulement considérés pour GCing si les demandes sur la mémoire doivent être comblées. Donc, s'il y a des références faibles et faibles, la sémantique de SoftReference est appliquée.

objets de référence faibles, qui ne empêchent d'être leurs referents fait finalisables, finalisé, puis remis en état .

http://download.oracle.com/javase/6/docs/api/java/lang/ref/WeakReference.html

objets de référence souples qui sont effacés à la discrétion du collecteur d'ordures en réponse à la demande de mémoire . Les références logicielles sont utilisées le plus souvent pour implémenter caches sensibles à la mémoire.

http://download.oracle.com/javase/6/docs/api/java/lang/ref/SoftReference.html

2

oui, il n'y a pas de problème à GC l'objet qui a autant de références douces/faibles que vous voulez, jusqu'à ce qu'il ait une référence forte presque.

0

Vous devriez remarquer que Weak Reference collecter toujours avant Soft Reference. Et Soft Reference souvent utiliser pour mettre en cache quelque chose. Cela veut dire: à ce moment-là, il n'a plus besoin de survivre, mais, parfois, dans le futur, peut-être vous en aurez besoin, et Java ne fonctionnera plus pour l'exemple d'un nouvel objet.

Questions connexes