Integrated: 8318051: Duration.between uses exceptions for control flow

Eamonn McManus emcmanus at openjdk.org
Tue Oct 24 18:35:41 UTC 2023


On Mon, 23 Oct 2023 17:33:48 GMT, Eamonn McManus <emcmanus at openjdk.org> wrote:

> The existing logic uses nanosecond arithmetic to compute Duration.between. Since that can overflow for durations greater than 292 years, it has a try/catch that falls back to computing the seconds part and adjusting that for nanoseconds. However, exception handling is typically very expensive, so in cases like the one in the linked bug this method was a performance trap.
> 
> The new logic is essentially the old catch block. It needs a special case for when the number of seconds is 0, so it is slightly slower in that case. But in other cases it is probably somewhat faster, because it avoids a [division](https://github.com/openjdk/jdk/blob/8d9a4b43f4fff30fd217dab2c224e641cb913c18/src/java.base/share/classes/java/time/Duration.java#L283) and associated mod.
> 
> The test coverage in [`TCKDuration`](https://github.com/openjdk/jdk/blob/8d9a4b43f4fff30fd217dab2c224e641cb913c18/test/jdk/java/time/tck/java/time/TCKDuration.java#L780) is already very thorough so no new tests are needed.

This pull request has now been integrated.

Changeset: 9c819fd3
Author:    Eamonn McManus <emcmanus at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/9c819fd3b7e564b53514185573f4ffe28368b46b
Stats:     32 lines in 1 file changed: 17 ins; 14 del; 1 mod

8318051: Duration.between uses exceptions for control flow

Reviewed-by: rriggs

-------------

PR: https://git.openjdk.org/jdk/pull/16318


More information about the core-libs-dev mailing list