RFR: 8269466: Factor out the common code for initializing and starting internal VM JavaThreads

David Holmes david.holmes at oracle.com
Tue Jun 29 22:37:21 UTC 2021


And apologies for the old commits - I forgot to clear them out before 
creating the PR.

David

On 30/06/2021 8:33 am, David Holmes wrote:
> Please see the JBS issue for more details, but basically we have 8 different kinds of internal VM JavaThreads (grouping the three types of CompilerThread together) that all basically duplicated the logic for initializing (preparing is the term we use for user-defined JavaThreads) and starting the new thread. This common code can be factored out into static helpers in JavaThread.
> 
> This change does not look at the way the java.lang.Thread instance is created - that will be handled by a separate RFE.
> 
> The semantics of the changes are not identical, but I don't believe there is any observable change in behaviour. The scope of holding the Threads_lock has been reduced, and we now create the JavaThread instances ("new XXXThread(...)") outside of the lock. As far as I can see nothing in the construction process needs to happen under the Threads_lock.
> 
> A few of the threads use a static `_instance` field to hold a reference to the create JavaThread. This proved very difficult to handle, as logically the field would need to be updated in the middle of the new factored-out method: after setting all the fields but before releasing the newly started thread. I eventually realized that in all but one case those `_instance` fields are never used and so could be deleted. The one case remaining does not need to be set as I just described, but can be set after the thread has started, as the new thread does not examine it (arguably its existence is unnecessary).
> 
> The trickiest changes related to the CompilerThreads, so they need particular scrutiny.
> 
> Testing: tiers 1-3
> 
> Thanks,
> David
> 
> -------------
> 
> Commit messages:
>   - Removed leftover experimental code
>   - Remove unnedded include
>   - Fixed old comment
>   - Set native priority before starting the CompilerThread.
>   - 8269466: Factor out the common code for initializing and starting internal VM JavaThreads
>   - interim 2 - template method doesn't work
>   - Interim
> 
> Changes: https://git.openjdk.java.net/jdk/pull/4629/files
>   Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4629&range=00
>    Issue: https://bugs.openjdk.java.net/browse/JDK-8269466
>    Stats: 278 lines in 13 files changed: 63 ins; 140 del; 75 mod
>    Patch: https://git.openjdk.java.net/jdk/pull/4629.diff
>    Fetch: git fetch https://git.openjdk.java.net/jdk pull/4629/head:pull/4629
> 
> PR: https://git.openjdk.java.net/jdk/pull/4629
> 


More information about the serviceability-dev mailing list