On Tue, 11 Jun 2024 09:32:14 GMT, Emanuel Peter <epe...@openjdk.org> wrote:

>> @eme64 The assembly information is below, can you take a look and see if it 
>> can help you diagnose the problem?
>> 
>> * JavaCode
>> 
>> class AbstractStringBuilder {
>>      private AbstractStringBuilder appendNull() {
>>         int count = this.count;
>>         ensureCapacityInternal(count + 4);
>>         byte[] val = this.value;
>>         if (isLatin1()) {
>>             val[count    ] = 'n';
>>             val[count + 1] = 'u';
>>             val[count + 2] = 'l';
>>             val[count + 3] = 'l';
>>         } else {
>>             StringUTF16.putCharsAt(val, count, 'n', 'u', 'l', 'l');
>>         }
>>         this.count = count + 4;
>>         return this;
>>     }
>> }
>> 
>> class StringUTF16 {
>>     public static void putCharsAt(byte[] value, int i, char c1, char c2, 
>> char c3, char c4) {
>>         putChar(value, i    , c1);
>>         putChar(value, i + 1, c2);
>>         putChar(value, i + 2, c3);
>>         putChar(value, i + 3, c4);
>>     }
>> }
>> 
>> 
>> * Apple M1 StringBuilder.appendNull PrintAssembly
>> 
>> /Users/wenshao/Work/git/jdk/build/macosx-aarch64-server-release/jdk/bin/java 
>> -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly 
>> -XX:CompileCommand=compileonly,*StringBuilder.appendNull 
>> -XX:-TieredCompilation -XX:TieredStopAtLevel=4 
>> -javaagent:/Applications/IntelliJ 
>> IDEA.app/Contents/lib/idea_rt.jar=61041:/Applications/IntelliJ 
>> IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 
>> -Dsun.stderr.encoding=UTF-8 ....
>> 
>> Compiled method (n/a) 96    1     n       
>> java.lang.invoke.MethodHandle::linkToStatic(LLLLLLL)L (native)
>>  total in heap  [0x0000000102efba08,0x0000000102efbb20] = 280
>>  relocation     [0x0000000102efbae0,0x0000000102efbae8] = 8
>>  main code      [0x0000000102efbb00,0x0000000102efbb20] = 32
>> 
>> [Disassembly]
>> --------------------------------------------------------------------------------
>> [Constant Pool (empty)]
>> 
>> --------------------------------------------------------------------------------
>> 
>> [Verified Entry Point]
>>   # {method} {0x000000011c3e1c80} 'linkToStatic' 
>> '(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/invoke/MemberName;)Ljava/lang/Object;'
>>  in 'java/lang/invoke/MethodHandle'
>>   # parm0:    c_rarg1:c_rarg1 
>>                         = 'java/lang/Object'
>>   # parm1:    c_rarg2:c_rarg2 
>>                         = 'java/lang/Object'
>>   # parm2:    c_rarg3:c_rarg3 
>>                         = 'java/lang/Object'
>>   # parm3:    c_rarg4:c...
>
> @wenshao This is just an assembly dump. You need to have some profiling data 
> that tells you where the time is spent. I'm not going to do the analysis work 
> for you, I'm sorry. I gave you some pointers as how to do that. If you have 
> more questions about how to do that, feel free to ask. You also have not 
> provided the `TraceMergeStores` log yet, as I asked you.
> 
> Can you investigate WHY there is a performance difference? Which `loads` and 
> `branches` etc are generated?

@eme64 How to TraceMergeStores?

-------------

PR Comment: https://git.openjdk.org/jdk/pull/19626#issuecomment-2160275514

Reply via email to