Looks good!
There seem to be quite a bit more that could be fixed to avoid going
through the signature string, either here or as follow-ups, e.g.:
LambdaForm prep = getPreparedForm(basicTypeSignature());
private static LambdaForm getPreparedForm(String sig) {
MethodType mtype = signatureType(sig);
LambdaForm prep =
mtype.form().cachedLambdaForm(MethodTypeForm.LF_INTERPRET);
if (prep != null) return prep;
assert(isValidSignature(sig));
prep = new LambdaForm(sig);
prep.vmentry =
InvokerBytecodeGenerator.generateLambdaFormInterpreterEntryPoint(sig);
return
mtype.form().setCachedLambdaForm(MethodTypeForm.LF_INTERPRET, prep);
}
... could be inlined into prepare() (the only caller) as:
MethodType mtype = methodType();
LambdaForm prep =
mtype.form().cachedLambdaForm(MethodTypeForm.LF_INTERPRET);
if (prep == null) {
String sig = basicTypeSignature();
assert(isValidSignature(sig));
prep = new LambdaForm(sig);
prep.vmentry =
InvokerBytecodeGenerator.generateLambdaFormInterpreterEntryPoint(sig);
prep =
mtype.form().setCachedLambdaForm(MethodTypeForm.LF_INTERPRET, prep);
}
this.vmEntry = prep;
All-in-all quite small micro-optimizations, but since there are
startup-sensitive use-cases lining up this seems worthwhile to untangle.
/Claes
On 2015-12-03 11:05, Michael Haupt wrote:
Dear all,
please review this change.
RFE: https://bugs.openjdk.java.net/browse/JDK-8072844
Webrev: http://cr.openjdk.java.net/~mhaupt/8072844/webrev.00
Thanks,
Michael