jmx-dev RFR: 8304074: [JMX] Add an approximation of total bytes allocated on the Java heap by the JVM [v5]

David Holmes dholmes at openjdk.org
Mon May 8 02:24:26 UTC 2023


On Fri, 5 May 2023 21:38:47 GMT, Paul Hohensee <phh at openjdk.org> wrote:

>> Please review this addition to com.sun.management.ThreadMXBean that returns the total number of bytes allocated on the Java heap since JVM launch by both terminated and live threads.
>> 
>> Because this PR adds a new interface method, I've updated the JMM_VERSION to 4, but would be happy to update it to 3_1 instead.
>
> Paul Hohensee has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8304074: [JMX] Add an approximation of total bytes allocated on the Java heap by the JVM

src/hotspot/share/services/management.cpp line 2107:

> 2105:     // when result is initialized.
> 2106:     jlong result = ThreadService::exited_allocated_bytes();
> 2107:     for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next();) {

If you call `exited_allocated_bytes` whilst you have an active `ThreadsListHandle` then you at least ensure you don't miss accounting for threads that are just about to terminate.

src/hotspot/share/services/threadService.cpp line 173:

> 171:     // was not called, e.g., JavaThread::cleanup_failed_attach_current_thread().
> 172:     decrement_thread_counts(thread, daemon);
> 173:     ThreadService::incr_exited_allocated_bytes(thread->cooked_allocated_bytes());

By doing this here you increase the likelihood of double-accounting for this thread. If you do this after the thread is no longer on any threads-list you may miss its contribution entirely, but you won't double-count it.

src/jdk.management/share/classes/com/sun/management/ThreadMXBean.java line 111:

> 109:      * Returns an approximation of the total amount of memory, in bytes,
> 110:      * allocated in heap memory since the Java virtual machine was launched,
> 111:      * including the amount allocated by terminated threads.

This "including ..." part seems redundant - it is the value allocated since JVM launch.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186967565
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186968365
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186968949


More information about the jmx-dev mailing list