On Tue, 8 Oct 2024 17:35:32 GMT, Claes Redestad <redes...@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

Reply via email to