It looks like we're spending a great deal of time calculating midnight, and the delta to midnight. I don't think this is a representative benchmark because the time intervals are not ordered, nor are they close together. This means the entire cache is invalidated each iteration (date, time, etc) because times are very far apart (cache is a total loss, rather than an optimization). We don't expect the midnight part of the calculation to be expensive because if you're logging one event per day, it doesn't really matter.
If I update the benchmark to attempt 1000 instants which are ordered and set up in 1ms intervals, I get the following results: Benchmark (pattern) Mode Cnt Score Error Units FormatterBenchmark.commonsFdf HH:mm:ss.SSS thrpt 4 10556.843 ± 348.698 ops/s FormatterBenchmark.commonsFdf yyyy-MM-dd'T'HH:mm:ss.SSS thrpt 4 6967.302 ± 1305.847 ops/s FormatterBenchmark.javaDtf HH:mm:ss.SSS thrpt 4 4095.345 ± 202.770 ops/s FormatterBenchmark.javaDtf yyyy-MM-dd'T'HH:mm:ss.SSS thrpt 4 2977.085 ± 487.369 ops/s FormatterBenchmark.log4jFdf HH:mm:ss.SSS thrpt 4 39175.861 ± 6159.347 ops/s FormatterBenchmark.log4jFdf yyyy-MM-dd'T'HH:mm:ss.SSS thrpt 4 33468.856 ± 597.435 ops/s On Tue, Oct 26, 2021, at 15:22, Volkan Yazıcı wrote: > I always had the impression that Log4j `FixedDateFormat` is faster than > Commons `FastDateFormat` which is faster than Java `DateTimeFormatter`, > yet, unless I am doing something stupid, the picture is totally different > in Java 17: > > > *Benchmark (pattern) Mode Cnt Score Error > Units*commonsFdf HH:mm:ss.SSS thrpt 12 6749.822 ± > 692.047 ops/s > commonsFdf yyyy-MM-dd'T'HH:mm:ss.SSS thrpt 12 4377.318 ± 209.050 ops/s > javaDtf HH:mm:ss.SSS thrpt 12 2515.950 ± 38.564 ops/s > javaDtf yyyy-MM-dd'T'HH:mm:ss.SSS thrpt 12 1794.764 ± 51.975 ops/s > log4jFdf HH:mm:ss.SSS thrpt 12 1032.089 ± 65.850 ops/s > log4jFdf yyyy-MM-dd'T'HH:mm:ss.SSS thrpt 12 696.700 ± 40.708 ops/s > > The sources and results can be reached from this GitHub repository > <https://github.com/vy/date-time-format-benchmark> and the associated > GitHub Actions workflow runs > <https://github.com/vy/date-time-format-benchmark/runs/4008433552>, > respectively. > > The preliminary profiling points to > `FixedDateTime#millisSinceMidnight(long)` for the unexpected slowness of > `FixedDateTime`. > > Would anybody mind confirming that the measurements make sense and > `FixedDateTime` is... broken? >