RFR: 8304976: Optimize DateTimeFormatterBuilder.ZoneTextPrinterParser.getTree()
Sergey Tsypanov
stsypanov at openjdk.org
Mon Mar 27 16:27:18 UTC 2023
1) When `DateTimeFormatter` is reused we don't need to copy `availableZoneIds` and allocate `nonRegionIds` as PrefixTree can be taken from cache. In the related benchmark allocation of `HashSet` takes ~93% of all time, so avoiding it should bring some improvement for cases when we reuse `DateTimeFormatter` to parse a string into `ZoneDateTime`

2) `DateTimeFormatter` is mostly used with one locale, so `cachedTree` and `cachedTreeCI` can have predefined size.
@State(Scope.Thread)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class DateTimeFormatterBenchmark {
private static final DateTimeFormatter df = new DateTimeFormatterBuilder().appendPattern("yyyy:MM:dd:HH:mm:v").toFormatter();
private static final String TEXT = "2015:03:10:12:13:ECT";
@Setup
public void setUp() {
ZonedDateTime.parse(TEXT, df);
}
@Benchmark
public ZonedDateTime parse() {
return ZonedDateTime.parse(TEXT, df);
}
}
-------------
Commit messages:
- Revert irrelevant
- Revert irrelevant
- Measure average time
- Delete duplicated
- Merge branch 'master' into date-time-formatter-build
- Add benchmark
- Add JavaDoc and imports
- Optimize DateTimeFormatterBuilder
Changes: https://git.openjdk.org/jdk/pull/12612/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12612&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8304976
Stats: 62 lines in 2 files changed: 57 ins; 1 del; 4 mod
Patch: https://git.openjdk.org/jdk/pull/12612.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/12612/head:pull/12612
PR: https://git.openjdk.org/jdk/pull/12612
More information about the core-libs-dev
mailing list