RFR: 8368159: Significant performance overhead when started with jdwp agent and unattached debugger [v2]
Serguei Spitsyn
sspitsyn at openjdk.org
Tue Sep 23 23:20:45 UTC 2025
On Mon, 22 Sep 2025 21:14:06 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:
>> src/hotspot/share/runtime/continuationFreezeThaw.cpp line 1622:
>>
>>> 1620:
>>> 1621: static void invalidate_jvmti_stack(JavaThread* thread) {
>>> 1622: if (JvmtiExport::can_post_frame_pop() || thread->is_interp_only_mode()) {
>>
>> Can you please explain why this change is required? Doesn't 'invalidate_cur_stack_depth' make sense only when interp_only mode is enabled for the threads only?
>> It is invalidated once thread switched to interp only.
>
> It seems odd to me that a method called `invalidate_jvmti_stack()` sometimes doesn't invalidate the stack. Even before this change it was not invalidating unless it was in interp_only mode, which also seems odd. If the cached value is not used for compiled frames, why bother with the interp_only check?
> Can you please explain why this change is required? Doesn't 'invalidate_cur_stack_depth' make sense only when interp_only mode is enabled for the threads only?
This is a right question to ask, thanks. I agree this confusing. The issue is with the pure continuations which are executed not in a context of a virtual thread. Without this check the following test is stably failed:
test/hotspot/jtreg/serviceability/jvmti/vthread/ContStackDepthTest
I'm currently kind of puzzled on how to make this check better.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/27403#discussion_r2373659467
More information about the serviceability-dev
mailing list