On Mon, 1 Dec 2025 02:33:33 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%
>
> Shaojin Wen has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   bug fix

I think from your experiments, maintaining onlyChronoField is indeed way too 
painful. So I support updating the map in Parsed to use a custom implemented 
map. This should be not as risky as that map is never exposed to the public 
users.

src/java.base/share/classes/java/time/format/DateTimeFormatter.java line 1825:

> 1823:             return this;
> 1824:         }
> 1825:         return new DateTimeFormatter(printerParser, locale, 
> decimalStyle, resolverStyle, fields, chrono, zone, onlyChronoField);

Same check comment

src/java.base/share/classes/java/time/format/DateTimeFormatter.java line 1874:

> 1872:             resolverFields = Collections.unmodifiableSet(new 
> HashSet<>(resolverFields));
> 1873:         }
> 1874:         return new DateTimeFormatter(printerParser, locale, 
> decimalStyle, resolverStyle, resolverFields, chrono, zone, onlyChronoField);

Need to check if `resolverFields` has non-ChronoField

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

Changes requested by liach (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/28471#pullrequestreview-3532627956
PR Review Comment: https://git.openjdk.org/jdk/pull/28471#discussion_r2583190506
PR Review Comment: https://git.openjdk.org/jdk/pull/28471#discussion_r2583190245

Reply via email to