title: How are SoftReferences collected by JVMs in practice?
body: <p>I have two separate caches running in a JVM (one controlled by a third party library) each using soft references.  I would prefer for the JVM to clear out my controlled cache before the one controlled by the library.  The SoftReference javadoc states:</p>
  
  <blockquote>
    <p>All soft references to softly-reachable objects are guaranteed to have
    been cleared before the virtual machine throws an OutOfMemoryError.
    Otherwise no constraints are placed upon the time at which a soft
    reference will be cleared or the order in which a set of such
    references to different objects will be cleared. Virtual machine
    implementations are, however, encouraged to bias against clearing
    recently-created or recently-used soft references.</p>
    
    <p>Direct instances of this class may be used to implement simple caches;
    this class or derived subclasses may also be used in larger data
    structures to implement more sophisticated caches. As long as the
    referent of a soft reference is strongly reachable, that is, is
    actually in use, the soft reference will not be cleared. Thus a
    sophisticated cache can, for example, prevent its most recently used
    entries from being discarded by keeping strong referents to those
    entries, leaving the remaining entries to be discarded at the
    discretion of the garbage collector.</p>
  </blockquote>
  
  <p>How do common JVM implementations, especially HotSpot, handle SoftReferences in practice?  Do they "bias against clearing recently-created or recently-used soft references" as encouraged to by the spec?</p>