[10?] RFR: 8193128: Reduce number of implementation classes returned by List/Set/Map.of()

Claes Redestad claes.redestad at oracle.com
Sat Dec 9 16:04:04 UTC 2017


Hi Andrej,

forEach seems like a no-brainer, but spliterator might require some 
extra care.

For example, returning Spliterators.emptySpliterator() and
Collections.singletonSpliterator when appropriate *sounds* like nice little
optimizations, but Arrays.spliterator(T[]) with an empty or 
single-element array
appears to be relatively cheap operations, whereas mixing implementation 
could
make call-sites accepting List.of(foo).spliterator() become megamorphic.

Thus I think these should be done independently as a follow-up, along with
tests and microbenchmarks.

Thanks!

/Claes

On 2017-12-09 11:43, Andrej Golovnin wrote:
> Hi Claes,
>
>> One more thing: Could you please add specialised implementations also
>> for the following methods:
>>
>> List.forEach(Consumer)
>>
>> List.spliterator()
>>   For List12 when List12.size() == 1 please use Collections.singletonSpliterator()
>>   (this method should be moved to the Spliterators class and be public).
>>   For List12 when List12.size() == 2 please use Arrays.spliterator().
>>
>>   For ListN when List.isEmpty() == true please use Spliterators.emptySpliterator​()
>>   and otherwise use Arrays.spliterator().
>>
> I’m sorry I forgot to mention, that Set12, SetN, Map12 and MapN should also
> have specialised implementations for the #forEach-methods and for
> the #spliterator()-methods in Set12, SetN.
>
> Thanks!
>
> Best regards,
> Andrej Golovnin
>



More information about the core-libs-dev mailing list