On Mon, 23 Oct 2023 17:33:48 GMT, Eamonn McManus <emcma...@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 <emcma...@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

Reply via email to