< 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: TBD

*** 91,100 **** --- 91,103 ---- /** ASM bytecode generation. */ private ClassWriter cw; private MethodVisitor mv; + /** Internal name lookup cache. */ + private HashMap<Class<?>, String> nameMap; + 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); --- 603,631 ---- 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(); ! ! String name; ! if (nameMap == null) { ! nameMap = new HashMap<>(2); ! name = null; ! } else { ! name = nameMap.get(c); ! } ! if (name == null) { ! name = c.getName().replace('.', '/'); ! nameMap.put(c, name); ! } ! return name; } 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 >