On Mon, 10 Nov 2025 03:15:06 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.

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

> 562:      * to keep the node around. It's possible for it to be 0 yet we 
> still need to
> 563:      * keep the node around. Also, it's possbile for it to be non-zero 
> yet we
> 564:      * don't need to keep the node around. More details int he comments 
> below.

Nit: Typo: s/int he/in the/

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

> 1397:     if (node == NULL) {
> 1398:         node = findThread(&otherThreads, thread);
> 1399:     }

Q: Could you explain a little bit why this change is needed? Do we need an 
update of the comment above?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28211#discussion_r2536075055
PR Review Comment: https://git.openjdk.org/jdk/pull/28211#discussion_r2536120552

Reply via email to