Duration.MAX_VALUE
Kurt Alfred Kluever
kak at google.com
Wed Sep 3 19:45:16 UTC 2025
Hi all,
Internally at Google, we've had a Durations.MAX constant exposed for the
past 7 years. It now has about 700 usages across our depot, which I can try
to categorize (at a future date).
While I haven't performed that analysis yet, I think exposing this constant
was a bit of a mistake. People seem to want to use MAX to mean "forever"
(often in regards to an RPC deadline). This works fine as long as every
single layer that touches the deadline is very careful about overflow. The
only reasonable thing you can do with MAX is compareTo() and equals().
Attempting to do any simple math operation (e.g., now+deadline) is going to
explode. Additionally, decomposing Duration.MAX explodes for any sub-second
precision (e.g., toMillis()).
As we dug into this, another proposal came up which was something like
Durations.VERY_LONG. This duration would be longer than any reasonable
finite duration but not long enough to cause an overflow when added to any
reasonable time. E.g., a million years would probably satisfy both
criteria. This would mean math operations and decompositions won't explode
(well, microseconds and nanoseconds still would), and it could safely be
used as a relative timeout.
As I mentioned above, I'd be happy to try to categorize a sample of our 700
existing usages if folks think that would be useful for this proposal.
Thanks,
-Kurt Alfred Kluever (on behalf of Google's Java and Kotlin Ecosystem team)
On Wed, Sep 3, 2025 at 1:53 PM Pavel Rappo <pavel.rappo at gmail.com> wrote:
> If I understood you correctly, you think we should also add
> Duration.MIN. If so, what use case do you envision for it? Or we add
> if purely for symmetry with Instant?
>
> On Wed, Sep 3, 2025 at 6:43 PM Pavel Rappo <pavel.rappo at gmail.com> wrote:
> >
> > On Wed, Sep 3, 2025 at 6:06 PM Stephen Colebourne <scolebourne at joda.org>
> wrote:
> > >
> > > Hmm, yes. Not sure why that didn't get added in Java 8!
> > > The constants would be MAX/MIN as per classes like Instant.
> > > Stephen
> >
> > I thought that naming could be tricky :) The public constant
> > Duration.ZERO and the public method isZero() are already there.
> > However, it does not preclude us from naming a new constant MAX.
>
--
kak
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20250903/39242f84/attachment.htm>
More information about the core-libs-dev
mailing list