On Sun, 3 Mar 2024 17:01:53 GMT, Doug Simon <dnsi...@openjdk.org> wrote:

> The `java/util/concurrent/Executors/UnreferencedExecutor.java` test can fail 
> when run on libgraal and `-Xcomp` is specified. The problem is that libgraal 
> in `-Xcomp` temporarily causes some extra memory pressure (probably due to 
> [JDK-8310218](https://bugs.openjdk.org/browse/JDK-8310218)) which can cause 
> recoverable OOMEs to occur (memory is recovered when the relevant libgraal 
> compilations complete). It also seems related to async threads used for 
> cleaning weak references when using G1 or ZGC as I cannot reproduce the 
> failure under `-XX:+UseSerialGC`.
> 
> Installing a global `Thread.UncaughtExceptionHandler` that ignores 
> `OutOfMemoryError`s resolves the problem.

Changes requested by dholmes (Reviewer).

test/jdk/java/util/concurrent/Executors/UnreferencedExecutor.java line 58:

> 56:                 throw new RuntimeException(e);
> 57:             }
> 58:         }

I'm not clear exactly what you are trying to achieve with this - is it just to 
not print the stacktrace when OOME occurs?

A UEH should not rethrow exceptions as they are effectively ignored as we are 
already at the final level of handling exceptions (the VM will print a one line 
warning if a UEH itself throws). If I understand what you want then I think the 
following would be more correct:

// Ignore OOME but do default handling for any other uncaught exception.
public void uncaughtException(Thread t, Throwable e) {
    if ( ! e instanceof OutOfMemoryError) {
        System.err.print("Exception in thread "" + t.getName() + "" ");
        e.printStackTrace(System.err);
    }
}


This doesn't stop the thread from terminating of course - the OOME already 
caused it to unwind its stack if we get this far.

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

PR Review: https://git.openjdk.org/jdk/pull/18098#pullrequestreview-1950797938
PR Review Comment: https://git.openjdk.org/jdk/pull/18098#discussion_r1533273137

Reply via email to