On Tue, 18 Nov 2025 21:51:26 GMT, Chris Plummer <[email protected]> wrote:

>> This is first of what will probably be 3 PRs to improve virtual thread 
>> ThreadNode handling in the debug agent, with a goal of improving performance 
>> and reducing footprint.
>> 
>> This PR focuses on purging virtual thread ThreadNodes in two places:
>> 
>> 1. Freeing the ThreadNode after handling a THREAD_START event for a virtual 
>> thread.
>> 2. Doing a "GC" of virtual thread ThreadNodes just before doing a "suspend 
>> all"
>> 
>> At some point in the future I want to attempt to free the ThreadNodes after 
>> performing ThreadReference related commands, which will result in the 
>> creation of a ThreadNode if not already created. Another area is in 
>> handleReportEventCompositeCommand() when the thread is not null and we are 
>> using the SUSPEND_NONE policy. This will get more ThreadNodes freed 
>> immediately after handling an event.
>> 
>> Part of the challenge with this PR is that there are many places in the 
>> debug agent that expect a ThreadNode to already have been created for the 
>> virtual thread, but now it is common that they have not. The main way this 
>> has been addressed is by having findRunningThread() create the ThreadNode if 
>> it does not already exist.
>> 
>> At some point in the future I will probably add logic to only "GC" 
>> ThreadNodes after the number reaches some threshold, but right now I want to 
>> free them very aggressively so we'll catch any bugs where there debug agent 
>> expects a ThreadNode to exist, but possibly now it might not.
>> 
>> Tested by running all tier2, tier5, and tier6 CI svc tests.
>
> Chris Plummer has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   comment typo

Looks good. Posted one nit suggestion though.

src/jdk.jdwp.agent/share/native/libjdwp/threadControl.c line 610:

> 608:         !node->popFrameProceed &&
> 609:         !node->popFrameThread &&
> 610:         node->pendingStop == NULL)

It is tricky to verify this list of checks is complete. :)

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

Marked as reviewed by sspitsyn (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/28211#pullrequestreview-3486187361
PR Review Comment: https://git.openjdk.org/jdk/pull/28211#discussion_r2544741007

Reply via email to