¿Cómo las JVM recopilan SoftReferences en la práctica?

Tengo dos cachés separadas ejecutándose en una JVM (una controlada por una biblioteca de terceros), cada una con referencias suaves. Preferiría que la JVM borrara mi caché controlada antes que la controlada por la biblioteca. El javadoc SoftReference afirma:

Se garantiza que todas las referencias suaves a objetos accesibles de manera suave se borraron antes de que la máquina virtual arroje un OutOfMemoryError. De lo contrario, no se imponen restricciones sobre el momento en que se borrará una referencia suave o el orden en que se borrará un conjunto de tales referencias a diferentes objetos. Sin embargo, se alienta a las implementaciones de máquinas virtuales a inclinarse contra el borrado de referencias suaves creadas recientemente o utilizadas recientemente.

as instancias @Direct de esta clase se pueden usar para implementar cachés simples; esta clase o subclases derivadas también se pueden usar en estructuras de datos más grandes para implementar cachés más sofisticados. Mientras el referente de una referencia suave sea fuertemente accesible, es decir, esté realmente en uso, la referencia suave no se borrará. Por lo tanto, un caché sofisticado puede, por ejemplo, evitar que sus entradas utilizadas más recientemente se descarten manteniendo referentes fuertes para esas entradas, dejando que las entradas restantes se descarten a discreción del recolector de basura.

¿Cómo las implementaciones comunes de JVM, especialmente HotSpot, manejan SoftReferences en la práctica? ¿"Sesgan en contra de borrar referencias suaves creadas recientemente o usadas recientemente" como lo alienta la especificación?

Respuestas a la pregunta(10)

Su respuesta a la pregunta