On Fri, 30 Jan 2026 05:46:32 GMT, Koushik Muthukrishnan Thirupattur 
<[email protected]> wrote:

> > So even if there is a race condition then we'll just insert the same value 
> > twice. Would it be possible to insert 2 different values for the same key 
> > in this class? It doesn't seem so.
> 
> Thanks for the detailed comment. You’re right that this won’t corrupt the 
> cache and that the objects are semantically equivalent. The issue I see isn’t 
> correctness of the cache, but interning/canonicalization semantics.
> 
> I think it could be possible for two values to be inserted for the same 
> logical key: if two threads concurrently miss on `get()`, they can both 
> construct separate `X509CertImpl/X509CRLImpl` instances and then both call 
> `put()`. The cache remains valid, but different callers may observe different 
> object instances for the same certificate/CRL. That breaks the intent of 
> `intern()` as documented (returning a canonical cached instance) and can 
> introduce avoidable object churn.
> 
> The addIfNotPresent() helper keeps the “check-then-insert and return 
> existing” behavior atomic at this layer, without relying on assumptions about 
> the cache implementation. I would be happy to revisit if we agree interning 
> semantics are not required here. Let me know.

I see your point, but since this is `SoftMemoryCache` there is no guarantee it 
will always return the same exact object for the same key anyhow. The callers 
of `intern` method can't rely on that. SoftReferences are automatically cleared 
by the garbage collector in response to memory demand, then the new object will 
be re-inserted.

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

PR Comment: https://git.openjdk.org/jdk/pull/29181#issuecomment-3823820517

Reply via email to