On Mon, 15 Nov 2021 19:10:17 GMT, Roman Kennke <rken...@openjdk.org> wrote:

> > If the intent of this change is to alter the lifetimes of the objects in 
> > question in a meaningful way, I recommend a CSR for the behavioral 
> > compatibility impact.
> 
> It would be hard for application code to observe this change: before the 
> change, a ClassLoader and its classes could be lingering in the cache longer 
> than necessary, even if otherwise not reachable. With the change, they would 
> be reclaimed as soon as they become unreachable. This could only be observed, 
> if application code holds onto ClassLoader or Class instances via Weak or 
> PhantomReference, and even then I am not sure if that qualifies as 
> 'meaningful'.

Hi Roman,

What your patch changes is the following:

ConcurrentHashMap<WeakReference<Class<?>>, SoftReference<ObjectStreamClass>>

into:

ConcurrentHashMap<WeakReference<Class<?>>, WeakReference<ObjectStreamClass>>


While it is true that when the Class<?> object used in a weak key is not 
reachable any more by the app, it is not sensible to hold on to the value any 
longer so in that respect SoftReference<Value> is to "storng" of a weakness. 
But while the Class<?> object is still reachable by the app, the app expects to 
obtain the ObjectStreamClass (the value) from the cache at least most of the 
time. If you change the SoftReference<ObjectStreamClass> into 
WeakReference<ObjectStreamClass>, the ObjectStreamClass might get GC-ed even 
while in the middle of stream deserialization.

ObjectStream class pre-dates java.lang.invoke (MethodHandles), so it uses its 
own implementation of weak caching. But since MethodHandles, there is a class 
called ClassValue<T> that would solve these problem with more elegance, because 
it ties the lifetime of the value (ObjectStreamClass) to the lifetime of the 
Class<?> key (Class object has a strong reference to the associated value) 
while the Class<?> key is only Weakly referenced.

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

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

Reply via email to