RFR: 8287135: Calculation of jmm_GetMemoryUsage is wrong [v3]
Ioi Lam
iklam at openjdk.java.net
Wed Jun 8 06:03:25 UTC 2022
On Tue, 7 Jun 2022 10:07:08 GMT, Yi Yang <yyang at openjdk.org> wrote:
>> It seems that calculation of MemoryMXBean.getNonHeapMemoryUsage(jmm_GetMemoryUsage) is wrong.
>>
>> Currently, `NonHeapUsage=CodeCache+Metaspace(ClassTypeSpace+NonClassTypeSpace)+CompressedClassSpace(ClassTypeSpace)`
>>
>> ==> CodeHeap 'non-nmethods' 1532544 (Used)
>> ==> CodeHeap 'profiled nmethods' 0
>> ==> CodeHeap 'non-profiled nmethods' 13952
>> ==> Metaspace 506696
>> ==> Compressed Class Space 43312
>> init = 7667712(7488K) used = 2096504(2047K) committed = 8454144(8256K) max = -1(-1K)
>>
>> In this way, getNonHeapMemoryUsage is larger than it ought to be, it should be `NonHeapUsage = CodeCache + Metaspace`.
>
> Yi Yang has updated the pull request incrementally with one additional commit since the last revision:
>
> update
@tstuefe could you take a look at the test changes. Since we can no longer query the compressed class space individually, I think the tests may become more lenient than before. For example, memoryUsageSmallComp/TestDescription.java uses `MemoryUsageTest::checkForNotGrowing()` which monitors the used bytes in `MetaspaceBaseGC::pool.getUsage().getUsed()`
- Before this PR, it checks that the usage of the compressed klass space doesn't grow.
- After this PR, it will allow the compresed klass space to grow, as long as the "other" meta space shrinks by a similar amount.
Is this OK? Or should we add a new whitebox API to query the compressed vs meta space?
src/hotspot/share/services/management.cpp line 743:
> 741: } else {
> 742: // Calculate the memory usage by summing up the pools.
> 743: // NonHeapUsage = CodeHeaps + Metaspace
I think the new comments in this file can be removed.
test/hotspot/jtreg/vmTestbase/metaspace/gc/MemoryUsageTest.java line 141:
> 139: System.err.println("Usage: ");
> 140: System.err.println("java [-Xms..] [-XX:MetaspaceSize=..] [-XX:MaxMetaspaceSize=..] \\");
> 141: System.err.println(" " + MemoryUsageTest.class.getCanonicalName());
This method can be deleted since it's no longer used.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8831
More information about the serviceability-dev
mailing list