RFR: 8071507: (ref) Clear phantom reference as soft and weak references do

Kim Barrett kim.barrett at oracle.com
Fri Dec 4 18:16:47 UTC 2015


On Dec 4, 2015, at 2:16 AM, Per Liden <per.liden at oracle.com> wrote:
> 
> On 2015-12-02 19:37, Kim Barrett wrote:
>> Please review this change to PhantomReference processing, changing the
>> GC-based notification to automatically clear the referent.
>> 
>> […]
>> CR:
>> https://bugs.openjdk.java.net/browse/JDK-8071507
>> 
>> Webrevs:
>> http://cr.openjdk.java.net/~kbarrett/8071507/jdk.05/
> 
> test/java/lang/ref/PhantomReferentClearing.java:
> 
>  85         // Delete root -> O1, collect, verify P1 notified, P2 not notified.
>  86         O1 = null;
>  87         System.gc();
>  88         if (Q1.remove(ENQUEUE_TIMEOUT) == null) {
>  89             throw new RuntimeException("P1 not notified by O1 deletion");
>  90         } else if (Q2.remove(ENQUEUE_TIMEOUT) != null) {
>  91             throw new RuntimeException("P2 notified by O1 deletion.");
>  92         }
>  93
>  94         // Delete root -> O2, collect. P2 should be notified.
>  95         O2 = null;
>  96         System.gc();
>  97         if (Q2.remove(ENQUEUE_TIMEOUT) == null) {
>  98             throw new RuntimeException("P2 not notified by O2 deletion");
>  99         }
> 
> The calls to System.gc() isn't guaranteed to do what the test expects here. As you know, System.gc(), might not actually do anything, depending on which collector is used and the current circumstances (GC locker held, a concurrent GC is already in process, etc). To make the test robust I'd suggest you call System.gc() and check the queue in a loop, and fail after some reasonable amount of time/iterations.

I'd rather not clutter and uglify this and other tests to deal with a
problem we don't (so far as I can tell) presently actually have.  If a
problem does arise, the form of that problem will help guide what the
solution needs to be.  I suspect adding something to WhiteBox would be
the proper approach, so that it can be shared with other tests of this
form.




More information about the hotspot-gc-dev mailing list