RFR 8220238 : Enhancing j.l.Runtime/System::gc specification with an explicit 'no guarantee' statement

Hans Boehm hboehm at google.com
Tue May 28 23:36:33 UTC 2019


I agree with Aleksey's concern.

AFAICT, these methods are usually used for one of two purposes:

1) Let the implementation know that this would be a good time to garbage
collect because the application is likely to remain idle for a while.

2) Ensure that as many references as possible have been enqueued, and
traditionally, with runFinalization(), to ensure that as many finalizers as
possible have been run. If I run out of some resource managed this way, I
may want to try this before giving up.

I don't think this API was ever that well suited to either of these. For
(1), I really want a call that says "garbage collect if we're n% of the way
to triggering the next GC". For (2), I really want a call that does
precisely that but, so long as we still have finalizers, with a better
specification of what happens if I hold a lock needed by a finalizer.

I'm a bit concerned that with the watered-down spec, (2) becomes completely
unimplementable. (1) was already kind of unimplementable, since it's hard
to avoid triggering way too many GCs in a row. In my mind, this raises the
question of whether these are actually still useful.


On Tue, May 28, 2019 at 1:55 PM Roger Riggs <Roger.Riggs at oracle.com> wrote:

> Hi Aleksey,
>
> The </p> is always optional (in html5).
>
> The issue with the "when control returns" and "best effort" sentence is
> that is implies that something has been done
> and that is not necessarily true.  At best, it could say is that the
> implementation may have done something or done nothing
> and anything in between.
>
> Suggestions welcome.
>
> Thanks, Roger
>
>
>
> On 05/28/2019 02:06 PM, Aleksey Shipilev wrote:
> > On 5/28/19 7:58 PM, Roger Riggs wrote:
> >> Please review a change to the javadoc of Runtime.gc() and System.gc()
> to clarify
> >> that invoking these methods does not guarantee any specific result or
> timeliness
> >> of completion.
> >>
> >> The revised text is:
> >>
> >>        * Runs the garbage collector in the Java Virtual Machine.
> >>        *
> >>        * Calling this method suggests that the Java Virtual Machine
> >>        * expend effort toward recycling unused objects in order to
> >>        * make the memory they currently occupy available for reuse
> >>        * by the Java Virtual Machine.
> >>        * There is no guarantee that this effort will recycle any
> particular
> >>        * number of unused objects, reclaim any particular amount of
> space,
> >>        * or complete at any particular time, if at all.
> >>
> >> Issue:
> >>    https://bugs.openjdk.java.net/browse/JDK-8220238
> >>
> >> CSR:
> >>    https://bugs.openjdk.java.net/browse/JDK-8224760
> >>
> >> Webrev:
> >>    http://cr.openjdk.java.net/~rriggs/webrev-gc-8220238/index.html
> > Thank you.
> >
> > It feels like <p/> is missing between paragraphs?
> >
> > Also, I don't think it is sensible to drop the blocking behavior ("When
> control returns...") -- I
> > think some programs enjoy that property, and certainly many GCs have
> special tests to enforce this
> > property, even if GC is fully concurrent.
> >
>
>


More information about the core-libs-dev mailing list