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


Reply via email to