On Wed, 1 Mar 2023 12:39:52 GMT, Alan Bateman <[email protected]> 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