On Mon, 24 Nov 2025 08:02:35 GMT, Shaojin Wen <[email protected]> wrote:

> This PR optimizes the parsing performance of DateTimeFormatter by replacing 
> HashMap with EnumMap in scenarios where the keys are exclusively ChronoField 
> enum values.
> 
> When parsing date/time strings, DateTimeFormatter creates HashMaps to store 
> intermediate parsed values. HashMap has more overhead for operations compared 
> to specialized map implementations.
> 
> Since ChronoField is an enum and all keys in these maps are ChronoField 
> instances, we can use EnumMap instead, which provides better performance for 
> enum keys due to its optimized internal structure.
> 
> Parsing scenarios show improvements from 12% to 95%

Changes requested by liach (Reviewer).

src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java line 
2593:

> 2591:             for (DateTimePrinterParser pp : printerParsers) {
> 2592:                 if ((pp instanceof NumberPrinterParser    npp && 
> !(npp.field instanceof ChronoField))
> 2593:                  || (pp instanceof CompositePrinterParser cpp && 
> !cpp.onlyChronoField())) {

Missing check for `TextPrinterParser`

src/java.base/share/classes/java/time/format/Parsed.java line 134:

> 132:         if (onlyChronoField) {
> 133:             return new HashMap<>();
> 134:         } else {

Is this condition inverted :thinking: seems like it but how do you get the 
performance numbers

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

PR Review: https://git.openjdk.org/jdk/pull/28471#pullrequestreview-3502735627
PR Review Comment: https://git.openjdk.org/jdk/pull/28471#discussion_r2558118611
PR Review Comment: https://git.openjdk.org/jdk/pull/28471#discussion_r2558120676

Reply via email to