RFR: 8341755: Optimize argNames in InnerClassLambdaMetafactory [v2]
Chen Liang
liach at openjdk.org
Tue Oct 8 18:06:02 UTC 2024
On Tue, 8 Oct 2024 17:35:32 GMT, Claes Redestad <redestad at openjdk.org> wrote:
>> Shaojin Wen has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Lazy initialization of ARG_NAME_CACHE
>
> src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java line 193:
>
>> 191: String argName = i < ARG_NAME_CACHE_SIZE ? ARG_NAME_CACHE[i] : null;
>> 192: if (argName == null) {
>> 193: argName = "arg$".concat(Integer.toString(i + 1));
>
> With `Integer.toString` in the mix perhaps just as well keep this as a standard concat?
> Suggestion:
>
> argName = "arg$" + (i + 1);
New bytecode in last commit's `computeArgName`:
0: ldc #186 // String arg$
2: iload_0
3: iconst_1
4: iadd
5: invokestatic #188 // Method java/lang/Integer.toString:(I)Ljava/lang/String;
8: invokevirtual #193 // Method java/lang/String.concat:(Ljava/lang/String;)Ljava/lang/String;
11: areturn
Old bytecode in constructor:
222: iload 11
224: new #150 // class java/lang/StringBuilder
227: dup
228: invokespecial #152 // Method java/lang/StringBuilder."<init>":()V
231: ldc #155 // String arg$
233: invokevirtual #157 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
236: iload 11
238: iconst_1
239: iadd
240: invokevirtual #161 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
243: invokevirtual #164 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
246: aastore
247: aload_0
I believe using concat is cleaner.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21399#discussion_r1792297029
More information about the core-libs-dev
mailing list