Skip to content

Commit 6252112

Browse files
committed
svm: make "JDK-8354897: Support Soft/Weak Reference in AOT cache" work on JDK 21
1 parent a07a658 commit 6252112

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/ReferenceInternals.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.lang.ref.Reference;
3131
import java.lang.ref.SoftReference;
3232

33+
import jdk.graal.compiler.serviceprovider.JavaVersionUtil;
3334
import org.graalvm.word.Pointer;
3435

3536
import com.oracle.svm.core.NeverInline;
@@ -161,7 +162,8 @@ public static <T> void setNextDiscovered(Reference<T> instance, Reference<?> new
161162
}
162163

163164
public static boolean hasQueue(Reference<?> instance) {
164-
return cast(instance).queue != Target_java_lang_ref_ReferenceQueue.NULL_QUEUE;
165+
return cast(instance).queue != (JavaVersionUtil.JAVA_SPEC > 21 ? Target_java_lang_ref_ReferenceQueue.NULL_QUEUE
166+
: Target_java_lang_ref_ReferenceQueue.NULL);
165167
}
166168

167169
/*
@@ -229,7 +231,8 @@ public static void processPendingReferences() {
229231
} else {
230232
@SuppressWarnings("unchecked")
231233
Target_java_lang_ref_ReferenceQueue<? super Object> queue = SubstrateUtil.cast(ref.queue, Target_java_lang_ref_ReferenceQueue.class);
232-
if (queue != Target_java_lang_ref_ReferenceQueue.NULL_QUEUE) {
234+
if (queue != (JavaVersionUtil.JAVA_SPEC > 21 ? Target_java_lang_ref_ReferenceQueue.NULL_QUEUE
235+
: Target_java_lang_ref_ReferenceQueue.NULL)) {
233236
// Enqueues, avoiding the potentially overridden Reference.enqueue().
234237
queue.enqueue(ref);
235238
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/Target_java_lang_ref_Reference.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.lang.reflect.Field;
3030
import java.util.function.BooleanSupplier;
3131

32+
import jdk.graal.compiler.serviceprovider.JavaVersionUtil;
3233
import org.graalvm.nativeimage.Platform;
3334
import org.graalvm.nativeimage.Platforms;
3435
import org.graalvm.nativeimage.hosted.FieldValueTransformer;
@@ -119,7 +120,8 @@ public final class Target_java_lang_ref_Reference<T> {
119120
@Uninterruptible(reason = "The initialization of the fields must be atomic with respect to collection.")
120121
Target_java_lang_ref_Reference(T referent, Target_java_lang_ref_ReferenceQueue<? super T> queue) {
121122
this.referent = referent;
122-
this.queue = (queue == null) ? Target_java_lang_ref_ReferenceQueue.NULL_QUEUE : queue;
123+
this.queue = (queue == null) ? (JavaVersionUtil.JAVA_SPEC > 21 ? Target_java_lang_ref_ReferenceQueue.NULL_QUEUE
124+
: Target_java_lang_ref_ReferenceQueue.NULL) : queue;
123125
}
124126

125127
@KeepOriginal

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/Target_java_lang_ref_ReferenceQueue.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,21 @@
3030
import com.oracle.svm.core.annotate.Alias;
3131
import com.oracle.svm.core.annotate.RecomputeFieldValue;
3232
import com.oracle.svm.core.annotate.TargetClass;
33+
import com.oracle.svm.core.annotate.TargetElement;
34+
import com.oracle.svm.core.jdk.JDK21OrEarlier;
35+
import com.oracle.svm.core.jdk.JDKLatest;
3336

3437
@TargetClass(ReferenceQueue.class)
3538
final class Target_java_lang_ref_ReferenceQueue<T> {
36-
@Alias static Target_java_lang_ref_ReferenceQueue<Object> NULL_QUEUE;
39+
// Checkstyle: stop
40+
@Alias //
41+
@TargetElement(onlyWith = JDKLatest.class) //
42+
static Target_java_lang_ref_ReferenceQueue<Object> NULL_QUEUE;
43+
// CheckStyle: resume
44+
45+
@Alias //
46+
@TargetElement(onlyWith = JDK21OrEarlier.class) //
47+
static Target_java_lang_ref_ReferenceQueue<Object> NULL;
3748

3849
@Alias @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset) //
3950
volatile Reference<? extends T> head;

0 commit comments

Comments
 (0)