RFR: JDK-8074003 java.time.zone.ZoneRules.getOffset(java.time.Instant) can be optimized
Peter Levart
peter.levart at gmail.com
Mon Apr 27 16:24:54 UTC 2015
Hi again,
Here's another optimization to be reviewed that has been discussed a
while ago (just rebased from webrev.01) and approved by Stephen:
http://cr.openjdk.java.net/~plevart/jdk9-dev/ZoneOffsetTransition.epochSecond/webrev.02/
The discussion about it is intermingled with the ZoneId.systemDefault()
discussion and starts about here:
http://mail.openjdk.java.net/pipermail/core-libs-dev/2015-February/031873.html
The rationale for the optimization is speeding-up the conversion from
epoch time to LocalDateTime. This conversion uses
ZoneRules.getOffset(Instant) where there is a loop over
ZoneOffsetTransition[] array that searches for 1st transition that has
its toEpochSecond value less than the Instant's epochSecond. This calls
ZoneOffsetTransition.toEpochSecond repeatedly, converting
ZoneOffsetTransition.transition which is a LocalDateTime to epochSecond.
This repeated conversion is unnecessary, as ZoneOffsetTransition[] array
is part of ZoneRules which is cached. Optimizing the
ZoneOffsetTransition implementation (keeping both LocalDateTime variant
and eposhSecond variant of transition time as the object's state) speeds
up this conversion.
Regards, Peter
More information about the core-libs-dev
mailing list