Hi Peter,
On 11/11/2016 04:33 PM, Peter Levart wrote:
[...]
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.
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?
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