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

Reply via email to