> The test 
> [java/util/concurrent/locks/Lock/OOMEInAQS.java](https://github.com/openjdk/jdk/blob/master/test/jdk/java/util/concurrent/locks/Lock/OOMEInAQS.java)
>  timed out when run with "-XX:-TieredCompilation 
> -XX:+UnlockDiagnosticVMOptions -XX:CompileThresholdScaling=0.01" flags.
> 
> The test checks that AQS-based locks, conditions, and `CountDownLatches` do 
> not fail when encountering OOME. It intentionally fills Java heap to get OOME.
> 
> With `-XX:CompileThresholdScaling=0.01` C2 compiles test's code and scalarize 
> new `ConditionNode` object in 
> `AbstractQueuedSynchronizer::newConditionNode()` using 
> `ReduceAllocationMerges` optimization.
> 
> One of test's worker threads executes compiled code and hit uncommon trap. 
> During deoptimization scalarized object rematerialization failed (heap is 
> full) and VM throws OOME. The affected inlined frames are popped because we 
> can't execute them without materialized objects (see 
> [InterpreterRuntime::exception_handler_for_exception()](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/interpreter/interpreterRuntime.cpp#L522)).
>  As result, the inlined OOME handler is bypassed.
> 
> The test worker thread which hit deoptimization exits through "catch 
> (Throwable ex)" path without notifying other worker threads which hang on 
> "cond.await()" and we got timeout.
> 
> I suggest using an allocation's JVMstate information to walk through inlined 
> frames and check for OOME handlers. Don't eliminate the allocation If we find 
> such handler.  Narrow this condition only for `ReduceAllocationMerges` 
> optimization for this fix. I concern that general solution may introduce a 
> performance regression.
> 
> ---------
> - [x] I confirm that I make this contribution in accordance with the [OpenJDK 
> Interim AI Policy](https://openjdk.org/legal/ai).

Vladimir Kozlov has updated the pull request with a new target base due to a 
merge or a rebase. The pull request now contains 10 commits:

 - Merge branch 'master' into 8393490
 - Revert JDK-8394484 changes
 - Revert some changes
 - Additional test run for StressStackOverflow.java
 - Continue investigate StressStackOverflow.java failure
 - Add diagnostic run to StressStackOverflow.java test
 - Remove duplicated code
 - Add check to all SR allocations
 - Merge branch 'master' into 8393490
 - 8393490: java/util/concurrent/locks/Lock/OOMEInAQS.java timed out with 
-XX:CompileThresholdScaling=0.01

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

Changes: https://git.openjdk.org/jdk/pull/33197/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=33197&range=08
  Stats: 359 lines in 6 files changed: 352 ins; 2 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/33197.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/33197/head:pull/33197

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

Reply via email to