> 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 two additional commits since the last revision: - 8283346: Added null to the test data - 8283346: Refactoring: Using the ArrayList constructor directly ------------- Changes: - all: https://git.openjdk.org/jfx/pull/758/files - new: https://git.openjdk.org/jfx/pull/758/files/3f288403..28fbd344 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=758&range=04 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=758&range=03-04 Stats: 6 lines in 2 files changed: 0 ins; 1 del; 5 mod Patch: https://git.openjdk.org/jfx/pull/758.diff Fetch: git fetch https://git.openjdk.org/jfx pull/758/head:pull/758 PR: https://git.openjdk.org/jfx/pull/758