<i18n dev> RFR: 8372460: Use EnumMap instead of HashMap for DateTimeFormatter parsing to improve performance [v7]

Chen Liang liach at openjdk.org
Sat Dec 20 15:46:56 UTC 2025


On Tue, 9 Dec 2025 10:02:36 GMT, Shaojin Wen <swen at openjdk.org> 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:
> 
>   remove redundant checkField

I just noted that custom TemporalField implementations must be able to put any TemporalField they like into this map:
https://github.com/openjdk/jdk/blob/2d0928406027a848cf2d2d0574024970b8fb535c/src/java.base/share/classes/java/time/temporal/TemporalField.java#L364-L379

Roger's model will fail if a non-TemporalField puts into this map. This PR's model is safe because all `TemporalField` here will be `ChronoField` which won't try to do dangerous stuff to the map.

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

PR Comment: https://git.openjdk.org/jdk/pull/28471#issuecomment-3677909248


More information about the i18n-dev mailing list