On Sun, 26 Feb 2023 05:21:59 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:

> > Yes, I saw this method, and [it periodically calls 
> > System.gc()](https://github.com/openjdk/jdk/blob/b4ea80731c6c0a0328a9801590ba5b081f08c3bd/test/jdk/javax/swing/regtesthelpers/Util.java#L102-L103).
> 
> It generates OOM to make sure that gc will be called, unlike System.gc() 
> which per the spec can be ignored.

Can be but it's not ignored, it's respected.

I provided you at least two tests which solely rely on `System.gc()` and they 
don't fail.

> > I still don't understand your concern. How is generating OutOfMemoryError 
> > better than calling System.gc()?
> 
> That method uses both, which I suggested doing at the start.

You didn't suggest, at least explicitly, using `Util.generateOOME`.

Nevertheless, I think generating OOME is *redundant*, it adds another level of 
complexity and makes the test slower.

The flag `-Xmx100m` can be safely removed from the test now: it doesn't affect 
how quick the reference object is cleared.

> It is better to follow one approach than implement different patterns here 
> and there.

Perhaps, the time has come to change the approach: ditch generating OOME and 
just use `System.gc()` . We've always done this, but it doesn't mean it's the 
best approach, does it?

If the developers write tests to verify `Reference` objects are cleared without 
generating OOME by relying only on `System.gc()`, I see no reason why 
client-libs shouldn't follow the same pattern. The old tests which use 
`Util.generateOOME` could be retrofitted to the new pattern.

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

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

Reply via email to