On Mon, 11 Sep 2023 12:12:17 GMT, 温绍锦 <d...@openjdk.org> wrote:
> improve date toString performance, includes: > > java.util.Date.toString > java.util.Date.toGMTString > java.time.Instant.toString > java.time.LocalDate.toString > java.time.LocalDateTime.toString > java.time.LocalTime.toString As @liach says this should be done on top of #15651. As it stands now a thorough reviews seems a bit premature. Correct me if I'm wrong but the gains come from inlining code into the various `toString` methods to reduce need to go through `DateTimeFormatter`s - which allocate `StringBuilder` and might go through chains of `CompositePrinterParser` and such.. It seems that before inlining and duplicating logic - making the code overall more fragile and harder to maintain - that we ought to see if we can get close enough by optimizing `DateTimeFormatter` and the corresponding builders to produce types that may optimize better. src/java.base/share/classes/java/time/Instant.java line 1355: > 1353: @Override > 1354: public String toString() { > 1355: return DateTimeFormatter.ISO_INSTANT.format(this); Have you considered potentially more generalizable optimizations to `DateTimeFormatter.ISO_INSTANT.format(this)` here? Hand-rolling a fixed-length buffer, skipping the `StringBuilder` .. understandably this can have a performance edge, but perhaps a `DateTimeFormatter` like `ISO_INSTANT` can be optimized to get closer to whatever speed-up this gets you - with broader implications. src/java.base/share/classes/java/time/LocalDate.java line 2181: > 2179: if (yearAbs < 1000) { > 2180: if (year < 0) { > 2181: buf[off] = '-'; `buf[off++] = '-';` src/java.base/share/classes/java/time/LocalDate.java line 2188: > 2186: ByteArrayLittleEndian.setInt( > 2187: buf, > 2188: year < 0 ? 1 : 0, `off,` src/java.base/share/classes/java/time/LocalDate.java line 2192: > 2190: } else { > 2191: if (year > 9999) { > 2192: buf[off] = '+'; `buf[off++] = '+';`? ------------- PR Review: https://git.openjdk.org/jdk/pull/15658#pullrequestreview-1620003157 PR Review Comment: https://git.openjdk.org/jdk/pull/15658#discussion_r1321554515 PR Review Comment: https://git.openjdk.org/jdk/pull/15658#discussion_r1321590202 PR Review Comment: https://git.openjdk.org/jdk/pull/15658#discussion_r1321591620 PR Review Comment: https://git.openjdk.org/jdk/pull/15658#discussion_r1321588790