<i18n dev> RFR: 8372460: Use EnumMap instead of HashMap for DateTimeFormatter parsing to improve performance
Chen Liang
liach at openjdk.org
Tue Nov 25 06:32:36 UTC 2025
On Mon, 24 Nov 2025 08:02:35 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%
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
More information about the i18n-dev
mailing list