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

Aleksey Shipilev shade at openjdk.org
Fri May 5 16:56:24 UTC 2023


On Thu, 4 May 2023 19:54:57 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.

Some comments follow.

src/hotspot/share/include/jmm.h line 55:

> 53:   JMM_VERSION_2   = 0x20020000, // JDK 10
> 54:   JMM_VERSION_3   = 0x20030000, // JDK 14
> 55:   JMM_VERSION_3_0 = 0x20030000,

What's `JMM_VERSION_3_0`?

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

> 2113:       result += size;
> 2114:     }
> 2115:     return result + ThreadService::exited_allocated_bytes();;

Double `;;`.

src/hotspot/share/services/threadService.hpp line 111:

> 109:   static jlong exited_allocated_bytes()       { return _exited_allocated_bytes; }
> 110:   static void incr_exited_allocated_bytes(jlong size) {
> 111:     Atomic::add(&_exited_allocated_bytes, size);

`Atomic::add(&_exited_allocated_bytes, size, memory_order_relaxed);`, please. No need for overly-strict memory effects for this counter.

src/java.management/share/classes/sun/management/ThreadImpl.java line 535:

> 533:     private static native long getThreadAllocatedMemory0(long id);
> 534:     private static native void getThreadAllocatedMemory1(long[] ids, long[] result);
> 535:     private static native long getThreadAllocatedMemory2();

We can call this one `getAllThreadAllocatedMemory`, which obviates the need for `2` as the suffix.

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

> 157:      *
> 158:      * @return an approximation of the total memory allocated, in bytes, in
> 159:      * heap memory for the current thread,

I am not sure if typos changes in the public API requires a CSR (albeit trivial one). Maybe skip these updates?

test/jdk/com/sun/management/ThreadMXBean/ThreadAllocatedMemory.java line 221:

> 219:         // baseline should be positive
> 220:         Thread curThread = Thread.currentThread();
> 221:         long cumulative_size = mbean.getAllThreadAllocatedBytes();

Java style for variables is camel-case, `cumulativeSize`.

test/jdk/com/sun/management/ThreadMXBean/ThreadAllocatedMemory.java line 286:

> 284:     }
> 285: 
> 286:     private static long checkResult(Thread curThread,

There is another `checkResult` below? Should they be replaced by a single method?

test/jdk/com/sun/management/ThreadMXBean/ThreadAllocatedMemory.java line 377:

> 375:                 throw new RuntimeException(getName() +
> 376:                     " ThreadAllocatedBytes before = " + size1 +
> 377:                     " > ThreadAllocatedBytes after = " + size2);

Is this replaceable with `checkResult(...)`?

test/jdk/com/sun/management/ThreadMXBean/ThreadAllocatedMemoryArray.java line 120:

> 118:         long[] sizes1 = mbean.getThreadAllocatedBytes(ids);
> 119:         for (int i = 0; i < NUM_THREADS; i++) {
> 120:             checkResult(threads[i], sizes[i], sizes1[i]);

Since we are cleaning up the test anyway, can we / should we rename `sizes` -> `before`, `size1` -> `after`?

test/jdk/com/sun/management/ThreadMXBean/ThreadAllocatedMemoryArray.java line 164:

> 162: 
> 163:     private static void checkResult(Thread curThread,
> 164:                                     long prev_size, long curr_size) {

camelCase arguments.

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

PR Review: https://git.openjdk.org/jdk/pull/13814#pullrequestreview-1415057714
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186299709
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186309343
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186260976
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186261881
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186263383
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186265606
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186277116
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186275693
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186275048
PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1186275416


More information about the serviceability-dev mailing list