RFR: 8306842: Classfile API performance improvements [v4]

Claes Redestad redestad at openjdk.org
Mon May 15 17:08:01 UTC 2023


On Mon, 15 May 2023 14:34:13 GMT, Adam Sotona <asotona at openjdk.org> wrote:

>> I have to side with @liach here: `LinkedList` iteration is significantly slower than `ArrayList` even though the computational complexity is identical. Often by an integer factor. This is due to the sparseness of the linked list data structure on heap and the pointer chasing that entails.  
>> 
>> For minimum overhead of iteration over an immutable list then turning the list into an immutable via `List.copyOf` might be preferable due the JVM's ability to optimize over `@Stable` arrays.
>> 
>> Adhoc [JMH benchmark](https://gist.github.com/cl4es/1f21812241c47f32a9deaffcc996e8b3):
>> 
>> 
>> Benchmark                            Mode  Cnt    Score    Error   Units
>> ListIteration.iterateArrayList      thrpt   15  188,724 ± 10,903  ops/ms
>> ListIteration.iterateImmutableList  thrpt   15  230,901 ±  6,513  ops/ms
>> ListIteration.iterateLinkedList     thrpt   15   58,289 ±  0,497  ops/ms
>> 
>> 
>> Is it important to fix this? Perhaps not, but in a microbenchmark like this the fewer cycles we spend on "stuff" that isn't really part of the thing we're testing, the better. Increasingly so as the thing we're testing is getting more and more optimized.
>
> I'm not questioning performance differences between list implementations. 
> The implementation of top level list for this benchmark is irrelevant because ~10ns difference cannot affect ~100µs benchmark run.

Fair point. The only counter-point I'd like to make is that these things tend to percolate and get copied around over to other places where it _could_ matter, so if it's no big deal I'd be slightly happier if we could avoid ever using `LinkedList`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13671#discussion_r1194116650


More information about the core-libs-dev mailing list