On Thu, 13 Oct 2022 21:53:47 GMT, Ioi Lam <ik...@openjdk.org> wrote: > Please review this small optimization. As shown in the JBS issue, most of the > generated LambdaForm classes have a single ClassData, so we can get a small > footprint/speed improvement.
src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java line 321: > 319: private MemberName loadMethod(byte[] classFile) { > 320: Class<?> invokerClass = LOOKUP.makeHiddenClassDefiner(className, > classFile, Set.of()) > 321: .defineClass(true, > classDataValues()); Why not just put it in `classDataValues()` instead? Object classDataValues() { final List<ClassData> cd = classData; return switch(cd.size()) { case 0 -> null; // flatten for zero case case 1 -> cd.get(0).value; // flatten for single value case case 2 -> List.of(cd.get(0).value, cd.get(1).value); ... And it also covers zero case for free. src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java line 389: > 387: mv.visitMethodInsn(Opcodes.INVOKESTATIC, > "java/lang/invoke/MethodHandles", > 388: "classData", > "(Ljava/lang/Class;)Ljava/lang/Object;", false); > 389: if (classData.size() == 1) { if (classData.size() < 2) { It works for zero case, because `checkcast` always succeeds on nulls. ------------- PR: https://git.openjdk.org/jdk/pull/10706