On Thu, 30 Jun 2022 20:36:35 GMT, Roger Riggs <rri...@openjdk.org> wrote:

>> I'm not sure if all unused object will be collected in one GC call always.  
>> The gc() specification says "When control returns from the method call, the 
>> Java Virtual Machine has made a best effort to reclaim space from all unused 
>> objects. ... There is also no guarantee that this effort will determine the 
>> change of reachability in any particular number of objects, or that any 
>> particular number of {@link java.lang.ref.Reference Reference} objects will 
>> be cleared and enqueued."  But from the spec, I did not get a clear answer 
>> for the question.
>> 
>> If the `booleanSupplier` object could be cleared in a collection other than 
>> the `ref` collection, the current code may be safer.
>
> True, knowing when GC is 'done' is not deterministic except for a specify 
> Reference to a specific object.
> System.gc is just a request, the checking for an object can more quickly exit 
> the loop.
> The code is as is, and already commented, might wait an extra cycle, but only 
> in the case of a race between the requested predicate and the object being 
> reclaimed.  Ok as it.

Maybe not for this PR - but it could be useful to have a version of ForceGC 
that takes as parameter a ReferenceQueue<T> and a Reference<T>. That would be 
more efficient than creating a new object and waiting for a different cleaner 
thread to cleanup that object.

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

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

Reply via email to