Hi Zoltan,
On 11/11/2016 10:25 AM, Zoltán Majó wrote:
Hi,
please review the fix for 8169000:
https://bugs.openjdk.java.net/browse/JDK-8169000
http://cr.openjdk.java.net/~zmajo/8169000/webrev.00/
The bug was filed because different behavior of interpreted and
compiled code in HotSpot was observed (different behavior with respect
to phantom references). After discussions with Maurizio C, Alex B,
and David H, the best way to address this problem seems to be to
update update the documentation of the java.lang.ref to avoid
confusion in the future. David's comment in the bug report [1]
accurately and concisely summarizes the reasons for the suggested
patch. For more details please feel free to look at the comments in
the bug report.
Thank you!
Best regards,
Zoltan
[1]
https://bugs.openjdk.java.net/browse/JDK-8169000?focusedCommentId=14021250&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14021250
I think the wording could be even less specific about "detecting" the
reachability of the reference object. For example:
... If a registered reference becomes unreachable itself, then it *may*
never be enqueued.
In addition, the situations that describe when the reference *may* not
be enqueued could be expanded. For example:
... If a registered reference ceases to be strongly reachable itself,
then it *may* never be enqueued.
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