Skip to content

Commit 3f723ca

Browse files
committedAug 11, 2021
8271862: C2 intrinsic for Reference.refersTo() is often not used
Reviewed-by: kbarrett, mchung
1 parent abebbe2 commit 3f723ca

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed
 

‎src/java.base/share/classes/java/lang/ref/PhantomReference.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,12 @@ public T get() {
6969
* do reference processing concurrently.
7070
*/
7171
@Override
72+
boolean refersToImpl(T obj) {
73+
return refersTo0(obj);
74+
}
75+
7276
@IntrinsicCandidate
73-
native final boolean refersTo0(Object o);
77+
private native boolean refersTo0(Object o);
7478

7579
/**
7680
* Creates a new phantom reference that refers to the given object and

‎src/java.base/share/classes/java/lang/ref/Reference.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -363,13 +363,20 @@ public T get() {
363363
* @since 16
364364
*/
365365
public final boolean refersTo(T obj) {
366-
return refersTo0(obj);
366+
return refersToImpl(obj);
367367
}
368368

369369
/* Implementation of refersTo(), overridden for phantom references.
370+
* This method exists only to avoid making refersTo0() virtual. Making
371+
* refersTo0() virtual has the undesirable effect of C2 often preferring
372+
* to call the native implementation over the intrinsic.
370373
*/
374+
boolean refersToImpl(T obj) {
375+
return refersTo0(obj);
376+
}
377+
371378
@IntrinsicCandidate
372-
native boolean refersTo0(Object o);
379+
private native boolean refersTo0(Object o);
373380

374381
/**
375382
* Clears this reference object. Invoking this method will not cause this

0 commit comments

Comments
 (0)
Please sign in to comment.