Skip to content

Commit 643e28d

Browse files
wirthiansalond
authored andcommitted
[GR-24929] Add Alias for ConcurrentHashMap.NCPU and similar.
PullRequest: graal/19462
2 parents 15759c9 + 023114f commit 643e28d

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/JavaUtilSubstitutions.java

+72
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.oracle.svm.core.SubstrateUtil;
3838
import com.oracle.svm.core.annotate.Alias;
3939
import com.oracle.svm.core.annotate.Inject;
40+
import com.oracle.svm.core.annotate.InjectAccessors;
4041
import com.oracle.svm.core.annotate.RecomputeFieldValue;
4142
import com.oracle.svm.core.annotate.RecomputeFieldValue.Kind;
4243
import com.oracle.svm.core.annotate.Substitute;
@@ -150,6 +151,46 @@ final class Target_java_util_concurrent_ConcurrentHashMap {
150151
@Alias @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)//
151152
Target_java_util_concurrent_ConcurrentHashMap_EntrySetView entrySet;
152153

154+
@Alias @InjectAccessors(NCPUAccessor.class) //
155+
private static int NCPU;
156+
}
157+
158+
final class NCPUAccessor {
159+
private static int cachedNCPU = -1;
160+
161+
static int get() {
162+
if (cachedNCPU != -1) {
163+
return cachedNCPU;
164+
}
165+
return initializeNCPU();
166+
}
167+
168+
private static synchronized int initializeNCPU() {
169+
if (cachedNCPU != -1) {
170+
return cachedNCPU;
171+
}
172+
173+
cachedNCPU = Runtime.getRuntime().availableProcessors();
174+
return cachedNCPU;
175+
}
176+
177+
static synchronized void set(int value) {
178+
cachedNCPU = value;
179+
}
180+
}
181+
182+
@TargetClass(java.util.concurrent.Phaser.class)
183+
final class Target_java_util_concurrent_Phaser {
184+
185+
@Alias @InjectAccessors(NCPUAccessor.class) //
186+
private static int NCPU;
187+
}
188+
189+
@TargetClass(className = "java.util.concurrent.atomic.Striped64")
190+
final class Target_java_util_concurrent_atomic_Striped64 {
191+
192+
@Alias @InjectAccessors(NCPUAccessor.class) //
193+
private static int NCPU;
153194
}
154195

155196
@TargetClass(value = java.util.concurrent.ConcurrentHashMap.class, innerClass = "KeySetView")
@@ -289,6 +330,37 @@ public boolean getAsBoolean() {
289330
}
290331
}
291332

333+
@TargetClass(className = "java.util.concurrent.LinkedTransferQueue", innerClass = "DualNode")
334+
final class Target_java_util_concurrent_LinkedTransferQueue_DualNode {
335+
336+
@Alias @InjectAccessors(LinkedTransferQueueDualNodeIsUniprocessorAccessor.class) //
337+
private static boolean isUniprocessor;
338+
}
339+
340+
final class LinkedTransferQueueDualNodeIsUniprocessorAccessor {
341+
private static Boolean cachedIsUniprocessor = null;
342+
343+
static boolean get() {
344+
if (cachedIsUniprocessor != null) {
345+
return cachedIsUniprocessor;
346+
}
347+
return initializeIsUniprocessor();
348+
}
349+
350+
static void set(boolean value) {
351+
cachedIsUniprocessor = value;
352+
}
353+
354+
private static synchronized boolean initializeIsUniprocessor() {
355+
if (cachedIsUniprocessor != null) {
356+
return cachedIsUniprocessor;
357+
}
358+
359+
cachedIsUniprocessor = Runtime.getRuntime().availableProcessors() == 1;
360+
return cachedIsUniprocessor;
361+
}
362+
}
363+
292364
/** Dummy class to have a class with the file's name. */
293365
public final class JavaUtilSubstitutions {
294366
}

0 commit comments

Comments
 (0)