On Sun, 9 Apr 2023 02:28:37 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.
>
> Tingjun Yuan has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Add benchmark

I recommended toArray for concurrent collections usually optimize that better 
than size. The goal is to defend against malicious actors that produce broken 
objects (like method parameters with void type), and tossing a problem back to 
the actor is a good enough solution. All these broken toArray will immediately 
backfire to the caller or execute normally without side effects, so I think 
toArray is safe.

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

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

Reply via email to