On Wed, 1 Mar 2023 12:39:52 GMT, Alan Bateman <al...@openjdk.org> wrote:

>> This PR covers a number of issues with j.l.management.ThreadMXBean, and the 
>> JDK-specific extension c.s.management.ThreadMXBean, when there are virtual 
>> threads in use.
>> 
>> As background, ThreadMXBean was re-specified in Java 19 to support the 
>> monitoring and management of platform threads. It does not support virtual 
>> threads as their potential number, and the need to find a thread by id, does 
>> not make sense for this API. At the same time, JDK 19 introduced an 
>> alternative implementation of virtual threads for Zero and ports without 
>> continuations support in the VM. This alternative implementation of virtual 
>> threads means a JavaThread per virtual thread and so requires filtering to 
>> ensure that the API behaves as specified. For the initial implementation, 
>> the filtering was done in the ThreadMXBean implementation. That works for 
>> most functions but not for getThreadXXXTime(long[]) and 
>> getThreadAllocatedBytes(long[]) where the filtering needs to be pushed down 
>> to the management code.
>> 
>> The changes in this PR move the filtering to the management functions 
>> (jmm_XXX) so they only return information about platform threads. It also 
>> fixes ThreadMXBean.getCurrentThreadCpuTime and getCurrentThreadUserTime to 
>> not throw UOE when CPU time measurement from a platform thread is supported. 
>> There are some small adjustments to the API docs (see linked CSR). Test 
>> coverage is expanded as we didn't include tests for 
>> c.s.management.ThreadMXBean with virtual threads in JDK 19.
>> 
>> Testing tier1-3 (jdk_management test group is in test/jdk/:tier3), plus 
>> sanity checking that --with-jvm-variants=minimal builds as some of this code 
>> is not compiled in with minimal VM builds.
>
> Alan Bateman has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Update isXXXThreadCpuTimeSupported descriptions

src/java.management/share/classes/java/lang/management/ThreadMXBean.java line 
479:

> 477:      * if the thread of the specified ID exists, the thread is alive,
> 478:      * and CPU time measurement is enabled; {@code -1} if not enabled
> 479:      * or the specified ID is a virtual thread

It should be "{@code -1} if not enabled or the specified ID is a virtual thread 
or the thread does not exist or not alive."

Would this be simpler:


     * @return the total CPU time for a thread of the specified ID
     * if the thread of the specified ID is a platform thread, the thread is 
alive,
     * and CPU time measurement is enabled; {@code -1} otherwise.


I'm fine with either way.  Same comment for `getThreadUserTime(long)`

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

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

Reply via email to