STW вроде как концептуально необходим
Да и то что чисто в теории JIT так может - не значит, что разработчики рантайма так станут делать.
Да и про GC не забываем.
Если заранее знать особенности целевой машины (семейство процессоров, поддерживаемые наборы инструкций, и закинуть данные профайлинга, то результат в принципе не будет уступать JIT-ованным языкам.
Я понимаю, что ничего не может быть быстрее полной реализации необходимого функционала на C/C++,
Для меня важно стабильное экстремальное low lanency.
Нужно использовать StringBuilder в случае, когда нам неизвестно финальное значение строки, а при окончании ее составления, передавать его значение методом toString() обычному объекту строки?
И это переопределение из StringBuilderв Stringтолько из-за того, что через String str проще выводить значение через str, чем каждый раз делать StringBuilder.toString()?
Плюс мы не сможем из StringBuilderсделать массив в отличии от String, верно?
StringBuilder[] builders = new StringBuilder[42]
В таком случае мы же не можем навредить памяти, речь шла, если мы работаем с очень большим текстом и или в итерациях более 100?
# {method} {0x000000000ac640f8} 'add' '(Ljava/lang/Object;)Z' in 'java/util/ArrayList'
# this: rdx:rdx = 'java/util/ArrayList'
# parm0: r8:r8 = 'java/lang/Object'
# [sp+0x40] (sp of caller)
0x0000000002d2a760: mov r10d,DWORD PTR [rdx+0x8]
0x0000000002d2a764: shl r10,0x3
0x0000000002d2a768: cmp rax,r10
0x0000000002d2a76b: jne 0x0000000002cf5f60 ; {runtime_call}
0x0000000002d2a771: data32 xchg ax,ax
0x0000000002d2a774: nop DWORD PTR [rax+rax*1+0x0]
0x0000000002d2a77c: data32 data32 xchg ax,ax
[Verified Entry Point]
0x0000000002d2a780: mov DWORD PTR [rsp-0x6000],eax
0x0000000002d2a787: push rbp
0x0000000002d2a788: sub rsp,0x30 ;*synchronization entry
; - java.util.ArrayList::add@-1 (line 458)
0x0000000002d2a78c: mov QWORD PTR [rsp+0x8],r8
0x0000000002d2a791: mov rbp,rdx
0x0000000002d2a794: mov r9d,DWORD PTR [rdx+0x10] ;*getfield size
; - java.util.ArrayList::add@2 (line 458)
0x0000000002d2a798: mov r11d,DWORD PTR [rdx+0x14]
;*getfield elementData
; - java.util.ArrayList::ensureCapacityInternal@1 (line 223)
; - java.util.ArrayList::add@7 (line 458)
0x0000000002d2a79c: mov r8d,r9d
0x0000000002d2a79f: inc r8d ;*iadd
; - java.util.ArrayList::add@6 (line 458)
0x0000000002d2a7a2: cmp r11d,0xd5d0e088 ; {oop(a 'java/lang/Object'[0] )}
0x0000000002d2a7a9: je 0x0000000002d2a861 ;*if_acmpne
; - java.util.ArrayList::ensureCapacityInternal@7 (line 223)
; - java.util.ArrayList::add@7 (line 458)
0x0000000002d2a7af: inc DWORD PTR [rdx+0xc] ;*putfield modCount
; - java.util.ArrayList::ensureExplicitCapacity@7 (line 231)
; - java.util.ArrayList::ensureCapacityInternal@19 (line 227)
; - java.util.ArrayList::add@7 (line 458)
0x0000000002d2a7b2: mov r10d,DWORD PTR [r11+0xc] ; implicit exception: dispatches to 0x0000000002d2a881
0x0000000002d2a7b6: mov ebx,r9d
0x0000000002d2a7b9: sub ebx,r10d
0x0000000002d2a7bc: inc ebx
0x0000000002d2a7be: test ebx,ebx
0x0000000002d2a7c0: jg 0x0000000002d2a80e ;*ifle
; - java.util.ArrayList::ensureExplicitCapacity@17 (line 234)
; - java.util.ArrayList::ensureCapacityInternal@19 (line 227)
; - java.util.ArrayList::add@7 (line 458)
0x0000000002d2a7c2: mov DWORD PTR [rdx+0x10],r8d ;*return
; - java.util.ArrayList::ensureExplicitCapacity@25 (line 236)
; - java.util.ArrayList::ensureCapacityInternal@19 (line 227)
; - java.util.ArrayList::add@7 (line 458)
0x0000000002d2a7c6: mov r10d,DWORD PTR [r11+0xc]
0x0000000002d2a7ca: cmp r9d,r10d
0x0000000002d2a7cd: jae 0x0000000002d2a839
0x0000000002d2a7cf: mov r10d,DWORD PTR [r11+0x8]
0x0000000002d2a7d3: cmp r10d,0x200022ee ; {metadata('java/lang/Object'[])}
0x0000000002d2a7da: jne 0x0000000002d2a84d ;*aastore
; - java.util.ArrayList::add@26 (line 459)
0x0000000002d2a7dc: mov r10,r11 ;*getfield elementData
; - java.util.ArrayList::add@11 (line 459)
0x0000000002d2a7df: lea r10,[r11+r9*4+0x10]
0x0000000002d2a7e4: mov r11,QWORD PTR [rsp+0x8]
0x0000000002d2a7e9: mov r8,r11
0x0000000002d2a7ec: mov DWORD PTR [r10],r8d
0x0000000002d2a7ef: shr r10,0x9
0x0000000002d2a7f3: mov eax,0x1
0x0000000002d2a7f8: mov r11d,0x5965000
0x0000000002d2a7fe: mov BYTE PTR [r11+r10*1],r12b
;*synchronization entry
; - java.util.ArrayList::add@-1 (line 458)
0x0000000002d2a802: add rsp,0x30
0x0000000002d2a806: pop rbp
0x0000000002d2a807: test DWORD PTR [rip+0xfffffffffe5857f3],eax # 0x00000000012b0000
; {poll_return}
0x0000000002d2a80d: ret ;*synchronization entry
; - java.util.ArrayList::ensureExplicitCapacity@-1 (line 231)
; - java.util.ArrayList::ensureCapacityInternal@19 (line 227)
; - java.util.ArrayList::add@7 (line 458)