< prev index next >

src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java

Print this page
rev 49071 : 8198888: Reduce string allocation churn in InvokerBytecodeGenerator
Reviewed-by: psandoz, plevart

*** 91,100 **** --- 91,104 ---- /** ASM bytecode generation. */ private ClassWriter cw; private MethodVisitor mv; + /** Single element internal class name lookup cache. */ + private Class<?> lastClass; + private String lastInternalName; + private static final MemberName.Factory MEMBERNAME_FACTORY = MemberName.getFactory(); private static final Class<?> HOST_CLASS = LambdaForm.class; /** Main constructor; other constructors delegate to this one. */ private InvokerBytecodeGenerator(LambdaForm lambdaForm, int localsMapSize,
*** 600,616 **** throw new InternalError("unknown return type: " + type); } mv.visitInsn(opcode); } ! private static String getInternalName(Class<?> c) { if (c == Object.class) return OBJ; else if (c == Object[].class) return OBJARY; else if (c == Class.class) return CLS; else if (c == MethodHandle.class) return MH; assert(VerifyAccess.isTypeVisible(c, Object.class)) : c.getName(); ! return c.getName().replace('.', '/'); } private static MemberName resolveFrom(String name, MethodType type, Class<?> holder) { MemberName member = new MemberName(holder, name, type, REF_invokeStatic); MemberName resolvedMember = MemberName.getFactory().resolveOrNull(REF_invokeStatic, member, holder); --- 604,625 ---- throw new InternalError("unknown return type: " + type); } mv.visitInsn(opcode); } ! private String getInternalName(Class<?> c) { if (c == Object.class) return OBJ; else if (c == Object[].class) return OBJARY; else if (c == Class.class) return CLS; else if (c == MethodHandle.class) return MH; assert(VerifyAccess.isTypeVisible(c, Object.class)) : c.getName(); ! ! if (c == lastClass) { ! return lastInternalName; ! } ! lastClass = c; ! return lastInternalName = c.getName().replace('.', '/'); } private static MemberName resolveFrom(String name, MethodType type, Class<?> holder) { MemberName member = new MemberName(holder, name, type, REF_invokeStatic); MemberName resolvedMember = MemberName.getFactory().resolveOrNull(REF_invokeStatic, member, holder);
< prev index next >