WeakReference with null referent
orionllmain at gmail.com
Wed Jul 11 05:02:52 UTC 2018
There are a few valid use cases where `new WeakReference<>(null)` makes
some sense. So, we shouldn't forbid nulls.
`new WeakReference<>(null, queue)` makes less sense but I bet someone is
using this too for some reason.
My initial message was not about changing the behavior but only about
changing the JavaDoc. I just want to add a clear specification of what
happens to references with null referents.
2018-07-11 6:26 GMT+07:00 mandy chung <mandy.chung at oracle.com>:
> On 7/10/18 4:04 PM, Éamonn McManus wrote:
>> Do you know any other example?
>> Here's an example from the JDK itself:
> Thanks Eamonn.
> I also found a few other similar usages in JDK to initialize
> with an "empty" WeakReference field that may be updated with
> a weak ref with a referent at runtime so that the code can
> always assume this field is non-null.
> Due to the current usage and compatibility risk, not worth
> to enforce non-null referent.
> On Tue, 10 Jul 2018 at 10:11, mandy chung <mandy.chung at oracle.com> wrote:
>>> On 7/9/18 11:59 PM, Peter Levart wrote:
>>>> There are situations where being able to create a XxxReference without a
>>>> referent is useful. For example, imagine a doubly-linked list of
>>>> WeakReference subclasses - a special instance without a referent can be
>>>> used as the head of such list that never goes away and simplifies
>>>> insertion/deletion logic, etc...
>>>> JDK's java.lang.ref.Cleaner API uses such scheme in its implementation
>>>> (see jdk.internal.ref.CleanerImpl.[Phantom|Weak|Soft]CleanableRef
>>> Thanks for pointing this out. It's used as a convenience and it's
>>> not hard to handle insertion/deletion logic though. Another
>>> alternative may be to create an object as the strongly reachable
>>> referent. I wonder if any existing code depends on null referent
>>> like the cleaner case and the compatibility risk. Do you know
>>> any other example?
More information about the core-libs-dev