On Thu, 26 May 2022 18:50:07 GMT, Xue-Lei Andrew Fan <[email protected]> wrote:
> Hi,
>
> May I have this test update reviewed?
>
> The ForceGC could be enhanced by using smaller wait/sleep time, and shared
> cleaner.
>
> Thanks,
> Xuelei
Even using a Cleaner is a more overhead than necessary.
I would have skipped the overhead of a cleaner and Atomic classes with
something more self contained as a static method:
/**
* The garbage collector is invoked to find unreferenced objects.
* A new object is created and then freed. The method returns
* when the object has been reclaimed or the GC did not complete in 10
seconds.
*
* @return true if GC was complete, false if did not complete after 10
Seconds
*/
public static boolean waitForGC() {
ReferenceQueue<Object> queue = new ReferenceQueue<>();
Object obj = new Object();
PhantomReference<Object> ref = new PhantomReference<>(obj, queue);
obj = null;
Reference.reachabilityFence(obj);
Reference.reachabilityFence(ref);
System.gc();
for (int retries = 100; retries > 0; retries--) {
try {
var r = queue.remove(100L);
if (r != null) {
return true;
}
} catch (InterruptedException ie) {
// ignore, the loop will try again
}
System.gc();
}
return false;
}
YMMV
-------------
PR: https://git.openjdk.java.net/jdk/pull/8907