8151460: Metaspace counters can have inconsistent values

Jon Masamitsu jon.masamitsu at oracle.com
Tue Mar 22 18:15:37 UTC 2016


http://cr.openjdk.java.net/~sjohanss/8151460/hotspot.00/test/gc/metaspace/TestPerfCountersAndMemoryPools.java.frames.html

80 // Adding a second GC due to metadata allocations caused caused by 
getting
81 // initial size from the pool. This is needed when running with -Xcomp.
82 System.gc();
83 assertEQ(getUsed(perfNS), pool.getUsage().getUsed(), "Used out of sync");
84 assertEQ(getCapacity(perfNS), pool.getUsage().getCommitted(), 
"Committed out of sync");

The comment (which has an extra "caused" BTW) says that the call to get the
initial size necessitates the System.gc().  Is there reason to believe 
that the
call to get the used will sometime down the road require another 
System.gc()?

http://cr.openjdk.java.net/~sjohanss/8151460/hotspot.00/test/gc/metaspace/TestMetaspacePerfCounters.java.frames.html

87 // Need to ensure that used is up to date and the all unloadable
88 // classes are unloaded before doing this check.


I'd suggest "unreachable" or "dead" in place of "unloadable"

// Need to ensure that used is up to date and the all unreachable
// classes are unloaded before doing this check.

Using "unloadable" feels a little like using an adjective to
describe itself.  Kind of like "What classes can be unloaded?
The unloadable ones." :-)

Jon

On 3/22/2016 6:35 AM, Stefan Johansson wrote:
> Hi,
>
> Please review this test-fix to avoid the problems described in:
> https://bugs.openjdk.java.net/browse/JDK-8151460
>
> Webrev:
> http://cr.openjdk.java.net/~sjohanss/8151460/hotspot.00/
>
> Summary:
> Two of the metaspace perf-counter tests fails intermittently when run 
> with -Xcomp. One reason this has been more frequent lately is a change 
> to one of the tests that removed a System.gc() call. This call seems 
> to be more important when running with -Xcomp. Having the System.gc() 
> call is needed because the PerfCounters are only updated after a GC. 
> And if any class loading/unloading happens after the call we can't do 
> the assertions we are doing.
>
> When doing this fix I also realized that one of the tests hadn't 
> changed UseCompressedKlassPointers to UseCompressedClassPointers, both 
> the command-line and the test-code used the old version so I updated 
> this as well.
>
> Testing:
> The updated tests pass in RBT.
>
> Thanks,
> Stefan



More information about the hotspot-gc-dev mailing list