[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: RFR: 8283346: Optimize observable ArrayList creation in FXCollections [v3]
From:       Marius Hanl <mhanl () openjdk ! java ! net>
Date:       2022-03-19 18:19:01
Message-ID: QEM0LI4bS_Ac0zul-otZrMIb5QYwXz55WwGJRq-cHwg=.0270ebab-65e4-4d3b-b0b2-2a693a8f6a49 () github ! com
[Download RAW message or body]

> 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
> 
> <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: Improved test name

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

Changes:
  - all: https://git.openjdk.java.net/jfx/pull/758/files
  - new: https://git.openjdk.java.net/jfx/pull/758/files/241962a3..a92e9a01

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jfx&pr=758&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jfx&pr=758&range=01-02

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jfx/pull/758.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/758/head:pull/758

PR: https://git.openjdk.java.net/jfx/pull/758


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic