On Mon, 11 Sep 2023 12:12:17 GMT, 温绍锦 <[email protected]> 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