RFR: 8364638: Refactor and make accumulated GC CPU time code generic

Jonas Norlinder duke at openjdk.org
Mon Aug 4 17:45:12 UTC 2025


Hi all,

This PR refactors the newly added GC CPU time code from [JDK-8359110](https://bugs.openjdk.org/browse/JDK-8359110).

As a stepping-stone to enable consolidation of CPU time tracking in e.g. hsperf counters and GCTraceCPUTime and to have a unified interface for tracking CPU time of various components in Hotspot this code can be refactored. This PR introduces a new interface to retrieve CPU time for various Hotspot components and it currently supports:

CPUTimeUsage::GC::total() // the sum of gc_threads(), vm_thread(), stringdedup()

CPUTimeUsage::GC::gc_threads()
CPUTimeUsage::GC::vm_thread()
CPUTimeUsage::GC::stringdedup()

CPUTimeUsage::Runtime::vm_thread()


I moved `CPUTimeUsage` to `src/hotspot/share/services` since it seemed fitting as it housed similar performance tracking code like `RuntimeService`, as this is no longer a class that is only specific to GC.

I also made a minor improvement in the CPU time logging during exit. Since `CPUTimeUsage` supports more components than just GC I changed the logging flag to from `gc,cpu` to `cpu` and created a detailed table:


[12.517s][info][cpu] === CPU time Statistics =============================================================
[12.517s][info][cpu]                                                                             CPUs
[12.517s][info][cpu]                                                                s       %  utilized
[12.517s][info][cpu]    Process
[12.517s][info][cpu]      Total                                              175.7628  100.00      14.0
[12.517s][info][cpu]      VM Thread                                            7.0000    3.98       0.6
[12.517s][info][cpu]      Garbage Collection                                  72.0000   40.96       5.8
[12.517s][info][cpu]        GC Threads                                        70.0000   39.83       5.6
[12.517s][info][cpu]        VM Thread                                          1.0000    0.57       0.1
[12.518s][info][cpu]        String Deduplication                               0.0000    0.00       0.0
[12.518s][info][cpu] =====================================================================================


Additionally, if CPU time retrieval fails it should not be the caller's responsibility to log warnings as this would bloat the code unnecessarily. I've noticed that `os` does log a warning for some methods if they fail so I continued on this path.

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

Commit messages:
 - Make GC CPU time framework generic

Changes: https://git.openjdk.org/jdk/pull/26621/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26621&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8364638
  Stats: 229 lines in 11 files changed: 170 ins; 44 del; 15 mod
  Patch: https://git.openjdk.org/jdk/pull/26621.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26621/head:pull/26621

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


More information about the hotspot-dev mailing list