[9] RFR (XS): 8169000: Define reference reachability more precisely in java.lang.ref package

Zoltán Majó zoltan.majo at oracle.com
Tue Nov 15 12:04:41 UTC 2016


Hi Peter,


On 11/14/2016 10:59 PM, Peter Levart wrote:
> Hi Zoltan,
>
> On 11/14/2016 03:28 PM, Zoltán Majó wrote:
>> [...]
>>
>> thank you for the suggestion and for the example program!
>>
>> Here is the updated webrev with the updated text:
>>
>> http://cr.openjdk.java.net/~zmajo/8169000/webrev.01/
>>
>> Does that look reasonable to you?
>
> Yes, I think this is good. Maybe just a nit. This last statement:
>
> "It is the responsibility of the program using reference objects to 
> ensure that the objects remain strongly reachable for as long as the 
> program is interested in their referents."
>
> ...could be written more nicely like:
>
> "It is the responsibility of the program to ensure that reference 
> objects remain strongly reachable for as long as it is interested in 
> their referents."
>
> ...or even:
>
> "It is the responsibility of the program to ensure that reference 
> objects remain strongly reachable for as long as it is interested in 
> tracking the reachability of their referents."
>
>
> What do you think?

yes, it sounds better, but probably it's best if we keep this change to 
a minimum. So I'd add only the word "strongly" to that sentence.

Please see the updated webrev in my reply to Mandy.

Thank you!

Best regards,


Zoltan

>
>
> Regards, Peter
>
>>
>> Thank you!
>>
>> Best regards,
>>
>>
>> Zoltan
>>
>>>
>>> The following modified test shows this situation:
>>>
>>>
>>> public class WeaklyReachablePhantomReference {
>>>
>>>     static ReferenceQueue<Object> rq = new ReferenceQueue<>();
>>>     static WeakReference<PhantomReference<Object>> weakRefRef;
>>>
>>>     public static void main(final String[] args) throws Exception {
>>>         weakRefRef = new WeakReference<>(
>>>             new PhantomReference<>(
>>>                 new Object(),
>>>                 rq
>>>             )
>>>         );
>>>         // <- here
>>>         System.gc();
>>>         Reference rmRef = rq.remove(1000);
>>>         if (rmRef == null) {
>>>             System.out.println("PhantomReference NOT enqueued");
>>>         } else {
>>>             System.out.println("PhantomReference enqueued");
>>>         }
>>>     }
>>> }
>>>
>>>
>>> At "<-- here" the PhantomReference object becomes weakly reachable 
>>> while its referent becomes phantom reachable and this is enough for 
>>> PhantomReference to not be enqueued.
>>>
>>>
>>> Regards, Peter
>>>
>>
>



More information about the core-libs-dev mailing list