Skip to content

OpenJ9 JDK 8 fastdebug gpf in JIT Compilation Thread compiling Unsafe direct-memory test under Balanced GC #24251

Description

@mengxy5236

Java -version output

openjdk version "1.8.0_502-internal-fastdebug"
OpenJDK Runtime Environment (build 1.8.0_502-internal-fastdebug-_2026_06_24_18_20-b00)
Eclipse OpenJ9 VM (build 1.8.0_502-internal-_2026_06_24_18_20-b00-master-45981f54ca, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20260624_000000 (JIT enabled, AOT enabled)
OpenJ9   - 45981f54ca
OMR      - a39ef2b2c
JCL      - 0c2003e7d6 based on jdk8u502-b05)

Summary of problem

Hi, we have identified a concurrent Java GC/JIT stress test case that can cause OpenJ9 JDK 8 fastdebug to crash.

The attached package contains the reduced Java test sources, a replay Java agent, a recorded scheduling sequence, VM options, and a javacore from a reproduced crash. The Java agent is used to replay a recorded thread schedule. The fatal event occurs inside OpenJ9 while a JIT compilation thread is compiling the test method:

com/gcscheduling/generated/DirectMemoryCrash.alternateBitsUsingBytes(I)V

The crash is reproducible with OpenJ9 JDK 8 fastdebug and Balanced GC using:

-Xmx512m -Xms512m
-Xgcpolicy:balanced
-Xgcthreads16
-XX:+IdleTuningIgnoreUnrecognizedOptions

Observed crash:

Dump Event "gpf" (00002000)
Signal_Number: 00000005
Current thread: "JIT Compilation Thread"
Compiling method: com/gcscheduling/generated/DirectMemoryCrash.alternateBitsUsingBytes(I)V
Module: /lib/x86_64-linux-gnu/libc.so.6
Symbol: gsignal

From the reproduced javacore:

1XHEXCPMODULE  Compiling method: com/gcscheduling/generated/DirectMemoryCrash.alternateBitsUsingBytes(I)V
3XMTHREADINFO  "JIT Compilation Thread-001" ... current category="JIT"

Steps to Reproduce

The attached package is named bug4_submit.zip.

bug4_submit.zip

unzip bug4_submit.zip
cd bug4_submit
chmod +x run.sh
JAVA_HOME=/path/to/openj9-jdk8-fastdebug ./run.sh

The script compiles the Java sources and executes the test with replay scheduling enabled. The effective JVM command is:

$JAVA_HOME/bin/java \
  -Xgcpolicy:balanced \
  -Xmx512m -Xms512m \
  -Xgcthreads16 \
  -XX:+IdleTuningIgnoreUnrecognizedOptions \
  -javaagent:Schedule/target/Schedule-1.0-SNAPSHOT-agent.jar=mode=replay\;file=workspace/sequence-checkpoints/ConcurrentTest_20260626_045330_629_BALANCED_sequence.json\;dumpBytecode=true \
  -cp workspace/output/classes:workspace/output/classes:Schedule/target/Schedule-1.0-SNAPSHOT-agent.jar \
  com.gcscheduling.generated.ConcurrentTest_20260626_045330_629

The crash is probabilistic. In our environment, the attached reproducer triggered the crash in 3 out of 5 runs.

Note

This issue was reproduced on a self-built OpenJ9 JDK 8 fastdebug build. We are reporting it as a fastdebug crash because the same test did not reproduce in our limited runs on a release OpenJ9 JDK 8 build.

The Java agent is included only to replay the recorded concurrent schedule. The package also includes a javacore from a reproduced crash.

The package keeps the original replay layout because the crash appears to be timing-sensitive; simplifying the layout reduced reproducibility in our tests.

This may be related to #23961 because both failures involve OpenJ9 JDK 8, Balanced GC, replayed concurrent scheduling, and JIT/stack-walking related behavior. However, the crash signature is different: #23961 crashed in a GC Worker in libj9gc29.so, while this reproducer crashes in a JIT Compilation Thread while compiling DirectMemoryCrash.alternateBitsUsingBytes(I)V on a fastdebug build.

Software and Hardware Environment

OS:
Linux 1ad3273ad17c 4.15.0-196-generic #207-Ubuntu SMP Thu Oct 27 21:24:58 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Architecture:
x86_64 / amd64

Container:
Linux container
NUMA support enabled, as reported in the OpenJ9 javacore.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions