On Mon, 25 Apr 2022 13:22:34 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:

>> Right, soft references are likely to be cleaned if they are not used in an 
>> entire GC cycle.
>> Using a soft reference for each map entry would not help here; note that all 
>> keys and all values in this map are GC roots (keys are enum names, values 
>> are `TRUE` and `FALSE`), so in practice they would never be collected.
>> Even if we made the entries collectable, it would not help with the TLS 
>> case; SSLEngine & SSLSocket only check the constraints once at the beginning 
>> of the handshake, so they would all expire at the same time anyway. What's 
>> even worse, we would then have to clear the expired entries from the map.
>> 
>> I also considered limiting the size of the map. That's a tricky subject; we 
>> would need to get the size limit exactly right. Given that the algorithms 
>> are always checked in the same order, if the cache were too small, we would 
>> get zero hits.
>> With all the above in mind I decided not to use `sun.security.util.Cache` 
>> here.
>
> FWIW: I wouldn't expect `SoftReference` (as opposed to `WeakReference`) to be 
> eagerly cleaned.

`SoftReference`s are guaranteed to survive one GC after use; beyond that their 
lifespan is determined by `SoftRefLRUPolicyMSPerMB` and the amount of memory 
available.

-------------

PR: https://git.openjdk.java.net/jdk/pull/8349

Reply via email to