RFR: 8283346: Optimize observable ArrayList creation in FXCollections [v6]
Michael Strauß
mstrauss at openjdk.org
Fri Jul 1 16:27:58 UTC 2022
On Fri, 1 Jul 2022 12:16:36 GMT, Marius Hanl <mhanl at openjdk.org> wrote:
>> This simple PR optimizes the observable `ArrayList` creation by using the ArrayList constructor/array size so that the underlying array will be initialized at the correct size which will speed up the creation as the array does not need to grow as a result of the `addAll` call.
>>
>> I also added tests which will succeed before and after to verify that nothing got broken by this change.
>> Also I made a benchmark test. Results:
>>
>> | Benchmark | Mode| Cnt | Score | Error | Units
>> | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
>> | ListBenchmark OLD | thrpt | 25 | 722,842 | ± 26,93 | ops/s
>> | ListBenchmark NEW | thrpt | 25 | 29262,274 | ± 2088,712 | ops/s
>>
>> Edit: I also made a synthetic benchmark by measuring the same code below 100 times with `System.nanoTime`.
>> ListBenchmark OLD (avg): 21-23ms
>> ListBenchmark NEW (avg): 2 ms
>>
>> <details><summary>Benchmark code</summary>
>>
>>
>> import javafx.collections.FXCollections;
>> import javafx.collections.ObservableList;
>> import org.openjdk.jmh.annotations.Benchmark;
>> import org.openjdk.jmh.annotations.Scope;
>> import org.openjdk.jmh.annotations.Setup;
>> import org.openjdk.jmh.annotations.State;
>> import org.openjdk.jmh.annotations.TearDown;
>>
>> import java.util.ArrayList;
>> import java.util.List;
>>
>> @State(Scope.Benchmark)
>> public class ListBenchmark {
>>
>> List<String> strings;
>>
>> @Setup
>> public void setup() {
>> strings = new ArrayList<>();
>> for(int i = 0; i< 100000;i++) {
>> strings.add("abc: " + i);
>> }
>> }
>>
>> @TearDown
>> public void tearDown() {
>> strings = null;
>> }
>>
>> @Benchmark
>> public ObservableList<String> init() {
>> return FXCollections.observableArrayList(strings);
>> }
>> }
>>
>>
>> </details>
>
> Marius Hanl has updated the pull request incrementally with one additional commit since the last revision:
>
> 8283346: Inline ArrayList creation
Marked as reviewed by mstrauss (Author).
-------------
PR: https://git.openjdk.org/jfx/pull/758
More information about the openjfx-dev
mailing list