Request for review (m) 8008966: NPG: Inefficient Metaspace counter functions cause large young GC regressions

Jon Masamitsu jon.masamitsu at
Wed Mar 27 16:13:46 PDT 2013

On 3/27/2013 2:14 PM, Coleen Phillimore wrote:
> Hi Jon,
> In metaspace.hpp maybe capacity_in_bytes should be called 
> capacity_bytes_slow() or something like that to distinguish it from 
> capacity_bytes() which is fast.
> *+   // Total capacity in all Metaspaces*
>     static size_t capacity_in_bytes() {
> *       return capacity_in_bytes(Metaspace::ClassType) +*
> *              capacity_in_bytes(Metaspace::NonClassType);*
> *+  #ifdef PRODUCT*
> *+      // Use capacity_bytes() in PRODUCT instead of this function.*
> *+     guarantee(false, "Should not call capacity_in_bytes() in the 
> *+ #endif
> *

I like the name capacity_bytes_slow() so made the change 
capacity_in_bytes -> capacity_bytes_slow
> Or maybe since capacity_in_bytes() is used for the other counters, 
> change the capacity_bytes() name to allocated_capacity() or something 
> like that.   Just so the two names are more different than the 
> presence of "_in".

I will keep this second suggestion in mind.  I'm going to be making some 
other name changes
so may use allocated_capacity.

> metaspace.cpp:
> line 270 and 283 are missing an 'n' in accounting.   I like the 
> promise of a cleanup.   Even with the comment, it's hard to keep these 
> straight.
> 1199-1201 is the same code as above it.


> 2520 capacity_in_bytes(mdtype) is still called for PrintGCDetails 
> which iterates over the CLD graph.   This seems too expensive for GC 
> printing.   It also calls used_in_bytes() so iterates twice. Then x2 
> for class vs. data metaspace.   This wasn't part of the GC slowdown 
> that was observed?

Yes this this is part of the slow down.  I don't have a replacement yet 
for used_in_bytes() yet so thought I
would fix this when I replaced used_in_bytes().   I can diff out this code
(the code that does data_space and class_space output separately) or
I can fix it.  Should I just fix it now?

> 2935.  I don't understand why we are checking UseMallocOnly since we 
> don't use malloc for metaspaces ever.

That was probably a mis-merge when I started with the malloc-chunks 
patch.  I'll
delete it.

> I can't comment on the CMS change.  It looks like you just moved it.

Yes, I just moved a class up so that I could use it in the "Resizing" phase.



> Coleen
> On 3/27/2013 12:13 AM, Jon Masamitsu wrote:
>> Replace the use of a method that calculated the total capacity of
>> the Metaspaces by iterating over all the Metaspaces by maintaining
>> the sum of Metaspace capacities as the Metachunks are
>> allocated to each Metaspace.  Also maintain a sum for each
>> Metaspace as the Metachunks are allocated to that Metaspace.
>> Change should_expand() and compute_new_space() to
>> calculate quantities in bytes.
>> Remove calls to methods that calculated totals for
>> "used" and "free" by iterating over the Metaspaces
>> in product mode.  In some cases substitute the use
>> of capacity for used.
>> Thanks.
>> Jon

More information about the hotspot-gc-dev mailing list