On Fri, 7 Apr 2023 08:27:18 GMT, Tingjun Yuan <d...@openjdk.org> wrote:

> In the current implementation of `String.join(CharSequence, Iterable)`, the 
> temp array `elems` is always initialized with a length of 8. It will cause 
> many array recreations when the `Iterable` contains more than 8 elements. 
> Furthermore, it's very common that an `Iterable` is also a `Collection`. So 
> if the `Iterable` is an instance of `Collection`, the initial length of the 
> array can be `((Collection<?>)elements).size()`. It will not change the 
> current behavior even if the `Collection` is modified asynchronously.
> 
> I don't know whether this change requires a CSR request.

I've just added the benchmark code, and here is the result tested on my 
computer.

Before change:


Benchmark                                           Mode  Cnt          Score    
      Error  Units
StringJoinWithIterable.joinWithArrayList            avgt   30  146820983.745 ±  
6654877.812  ns/op
StringJoinWithIterable.joinWithIterable             avgt   30  145236859.688 ±  
5683967.478  ns/op
StringJoinWithIterable.joinWithLinkedBlockingDeque  avgt   30  250139433.967 ± 
14381158.389  ns/op
StringJoinWithIterable.joinWithLinkedHashSet        avgt   30  167718287.313 ±  
7394905.875  ns/op
StringJoinWithIterable.joinWithLinkedTransferQueue  avgt   30  153245459.832 ±  
7972716.070  ns/op


After change:


Benchmark                                           Mode  Cnt          Score    
      Error  Units
StringJoinWithIterable.joinWithArrayList            avgt   30  138343729.406 ±  
5959140.498  ns/op
StringJoinWithIterable.joinWithIterable             avgt   30  149566458.195 ±  
9755905.704  ns/op
StringJoinWithIterable.joinWithLinkedBlockingDeque  avgt   30  247384811.927 ± 
14647765.134  ns/op
StringJoinWithIterable.joinWithLinkedHashSet        avgt   30  153244492.767 ±  
4589884.301  ns/op
StringJoinWithIterable.joinWithLinkedTransferQueue  avgt   30  157162685.594 ±  
4330658.539  ns/op



It seems that the improvement is not notable :-)

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

PR Comment: https://git.openjdk.org/jdk/pull/13383#issuecomment-1501022549

Reply via email to