On Thu, 1 Oct 2026 12:05:31 GMT, Fredrik Bredberg <[email protected]> wrote:

> This PR reduces the Thread-SMR (Safe Memory Reclamation) related cost of 
> starting and exiting threads.
> 
> Both starting and exiting a thread create a new `ThreadsList` and retire the 
> old one. Previously, we used to scan the hazard pointers of all threads when 
> a `ThreadsList` was retired. This made the execution cost increasingly higher 
> as more threads were started.
> 
> This PR tackles the problem in three ways:
> 
> 1. By not scanning hazard pointers every time a new thread is started. 
> Instead, we defer the scanning until either 16 `ThreadsLists` have been 
> retired or the retired lists occupy at least 4 MB of memory.
> 2. We use the scan that is performed when removing a thread to also determine 
> if it's safe to delete the thread, and thereby we potentially avoid a costly 
> re-scan in `wait_until_not_protected()`.
> 3. By checking if there is no retired `ThreadsList` that can protect the 
> thread, `wait_until_not_protected()` can also avoid a re-scan.
> 
> I've run the ThreadStart reproducer that is attached to 
> [JDK-8307970](https://bugs.openjdk.org/browse/JDK-8307970). Depending on the 
> number of idle threads, the changes in this PR show that threads start up to 
> ~63% faster (or in other words, a ~39% reduction in time to start a thread).
> 
> To go further than this likely requires a major rewrite of the Thread-SMR 
> system, which would not be a walk in the park.
> 
> Passes tier1-5 tests.
> 
> ---------
> - [x] I confirm that I make this contribution in accordance with the [OpenJDK 
> Interim AI Policy](https://openjdk.org/legal/ai).

This pull request has now been integrated.

Changeset: e249306c
Author:    Fredrik Bredberg <[email protected]>
URL:       
https://git.openjdk.org/jdk/commit/e249306c0c75335e309493aa916a7d2c80e91c6b
Stats:     223 lines in 5 files changed: 219 ins; 0 del; 4 mod

8307970: Thread.start is slow with large number of threads

Reviewed-by: dholmes, dcubed, eosterlund, pchilanomate

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

PR: https://git.openjdk.org/jdk/pull/33166

Reply via email to