< prev index next >
src/java.base/share/classes/java/lang/invoke/LambdaForm.java
Print this page
rev 13064 : 8142334: Improve lazy initialization of java.lang.invoke
Reviewed-by: psandoz, vlivanov, mhaupt
@@ -1022,11 +1022,11 @@
return true;
}
static class NamedFunction {
final MemberName member;
- @Stable MethodHandle resolvedHandle;
+ private @Stable MethodHandle resolvedHandle;
@Stable MethodHandle invoker;
NamedFunction(MethodHandle resolvedHandle) {
this(resolvedHandle.internalMemberName(), resolvedHandle);
}
@@ -1072,13 +1072,15 @@
MethodHandle resolvedHandle() {
if (resolvedHandle == null) resolve();
return resolvedHandle;
}
- void resolve() {
+ synchronized void resolve() {
+ if (resolvedHandle == null) {
resolvedHandle = DirectMethodHandle.make(member);
}
+ }
@Override
public boolean equals(Object other) {
if (this == other) return true;
if (other == null) return false;
@@ -1233,10 +1235,11 @@
traceInterpreter("[ call", this, arguments);
if (invoker == null) {
traceInterpreter("| getInvoker", this);
invoker();
}
+ // resolvedHandle might be uninitialized, ok for tracing
if (resolvedHandle == null) {
traceInterpreter("| resolve", this);
resolvedHandle();
}
assert(checkArgumentTypes(arguments, methodType()));
< prev index next >