> Hi all, > > This PR augments the CPU time sampling measurement capabilities that a user > can perform from Java code with the addition of > `MemoryMXBean.getGcCpuTime()`. With this patch it will be possible for a user > to measure process and GC CPU time during critical section or iterations in > benchmarks to name a few. This new method complements the existing > `OperatingSystemMXBean.getProcessCpuTime()` for a refined understanding. > > `CollectedHeap::gc_threads_do` may operate on terminated GC threads during > shutdown, but thanks to JDK-8366865 by @walulyai we can piggyback on the new > `Universe::is_shutting_down`. I have implemented a stress-test > `test/jdk/java/lang/management/MemoryMXBean/GetGcCpuTime.java` that may > identify reading CPU time of terminated threads. Synchronizing on > `Universe::is_shutting_down` and `Heap_lock` resolves this problem. > > FWIW; To my understanding we don't want to add a `Universe::is_shutting_down` > check in gc_threads_do as this may introduce a performance penalty that is > unacceptable, therefore we must be careful about the few places where > external users call upon gc_threads_do and may race with a terminating VM. > > Tested: test/jdk/java/lang/management/MemoryMXBean/GetGcCpuTime.java, > jdk/javax/management/mxbean hotspot/jtreg/vmTestbase/nsk/monitoring on Linux > x64, Linux aarch64, Windows x64, macOS x64 and macOS aarch64 with release and > fastdebug.
Jonas Norlinder has updated the pull request incrementally with two additional commits since the last revision: - j.l.management with generic API docs - Revert "Move from j.l.management to com.sun.management etc." This reverts commit 6431310109a02ec5c34f877a1c690afb00193043. ------------- Changes: - all: https://git.openjdk.org/jdk/pull/27537/files - new: https://git.openjdk.org/jdk/pull/27537/files/64313101..b03db63e Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=27537&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=27537&range=01-02 Stats: 186 lines in 11 files changed: 35 ins; 143 del; 8 mod Patch: https://git.openjdk.org/jdk/pull/27537.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/27537/head:pull/27537 PR: https://git.openjdk.org/jdk/pull/27537
