Skip to content

Commit dcf89ad

Browse files
committed
[GR-70904] Add caching in GraalAccess.
PullRequest: graal/22428
2 parents cea50b3 + 11c540b commit dcf89ad

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

substratevm/src/com.oracle.svm.util/src/com/oracle/svm/util/GraalAccess.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
import java.lang.reflect.Executable;
2828
import java.lang.reflect.Field;
2929
import java.lang.reflect.RecordComponent;
30+
import java.util.Map;
3031
import java.util.Objects;
32+
import java.util.concurrent.ConcurrentHashMap;
3133

3234
import org.graalvm.nativeimage.Platform;
3335
import org.graalvm.nativeimage.Platforms;
@@ -82,20 +84,25 @@ public static Providers getOriginalProviders() {
8284
return originalProviders;
8385
}
8486

87+
private static final Map<Class<?>, ResolvedJavaType> typeCache = new ConcurrentHashMap<>();
88+
private static final Map<Executable, ResolvedJavaMethod> methodCache = new ConcurrentHashMap<>();
89+
private static final Map<Field, ResolvedJavaField> fieldCache = new ConcurrentHashMap<>();
90+
private static final Map<RecordComponent, ResolvedJavaRecordComponent> recordCache = new ConcurrentHashMap<>();
91+
8592
public static ResolvedJavaType lookupType(Class<?> cls) {
86-
return originalProviders.getMetaAccess().lookupJavaType(cls);
93+
return typeCache.computeIfAbsent(cls, c -> originalProviders.getMetaAccess().lookupJavaType(cls));
8794
}
8895

8996
public static ResolvedJavaMethod lookupMethod(Executable exe) {
90-
return originalProviders.getMetaAccess().lookupJavaMethod(exe);
97+
return methodCache.computeIfAbsent(exe, e -> originalProviders.getMetaAccess().lookupJavaMethod(e));
9198
}
9299

93100
public static ResolvedJavaField lookupField(Field field) {
94-
return originalProviders.getMetaAccess().lookupJavaField(field);
101+
return fieldCache.computeIfAbsent(field, f -> originalProviders.getMetaAccess().lookupJavaField(f));
95102
}
96103

97104
public static ResolvedJavaRecordComponent lookupRecordComponent(RecordComponent rc) {
98-
return originalProviders.getMetaAccess().lookupJavaRecordComponent(rc);
105+
return recordCache.computeIfAbsent(rc, r -> originalProviders.getMetaAccess().lookupJavaRecordComponent(rc));
99106
}
100107

101108
public static SnippetReflectionProvider getOriginalSnippetReflection() {

0 commit comments

Comments
 (0)