RFR: 8368159: Significant performance overhead when started with jdwp agent and unattached debugger
Serguei Spitsyn
sspitsyn at openjdk.org
Sat Sep 20 04:47:47 UTC 2025
This update removes a significant performance overhead when an application running millions of virtual threads is started with the JDWP agent but debugger has not been attached. The overhead is 4X-6X slowdown.
The tested app normally (without debug agent) takes around 3+ seconds. With debug agent enabled it takes 14 seconds and more. The performance overhead is caused by the `jvmti_yield_cleanup()` recursively calling `JvmtiExport::continuation_yield_cleanup()`. The reason of this overhead is because the function `JvmtiExport::can_post_frame_pop()` is used to identify a need for the JVMTI cleanup which is not precise and triggers unneeded work when debugger has not been attached yet. The fix is to trigger the JVMTI cleanup with new function: `bool JvmtiExport::has_frame_pops(JavaThread* thread)`.
Testing:
- Insure the 4X-6X slowdown is gone for application an application running millions of virtual threads and started with the JDWP agent
- Mach5 tiers 1-6 are all passed
-------------
Commit messages:
- 8368159: Significant performance overhead when started with jdwp agent and unattached debugger
Changes: https://git.openjdk.org/jdk/pull/27403/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27403&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8368159
Stats: 21 lines in 3 files changed: 18 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/27403.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/27403/head:pull/27403
PR: https://git.openjdk.org/jdk/pull/27403
More information about the serviceability-dev
mailing list