Request for review (s) - 7198873

Mikael Gerdin mikael.gerdin at oracle.com
Tue Sep 25 18:09:14 UTC 2012


On 2012-09-25 18:23, Jon Masamitsu wrote:
> Mikael,
>
> Thanks for the review.
>
> The expand_and_allocate() does not do a GC.  It expands
> the Metaspace and does an allocation from the expanded
> space.  Only if that fails does the CMS case fall through to
> the full GC.

Yes.

>
> The policy for CMS is
>
> 1) Hitting the HWM should start a concurrent collection if
> CMS is doing class unloading.
> 2) Always  expand the Metaspace and allocate from
> the expanded space.
> 3) If expanding the Metaspace does not provide any free
> space, do a full GC to reclaim classloaders and class metadata
> and then retry the allocation.

But at what point does expanding the Metaspace not provide any free 
space? Is there some sort of back-off so that we don't just go ahead and 
allocate all available memory and then try to do a full gc when we've 
filled up the address space?
I'm kind of concerned about the case with CMS without 
CMSClassUnloadingEnabled. What I'm mainly worried about is slow leaks 
and cases where an application loads a bunch of classes and then 
releases the java level references to them but does not unload them 
since we don't get to the expand_and_allocate returning null.

/Mikael

>
> Jon
>
>
> On 09/25/12 07:23, Mikael Gerdin wrote:
>> Jon,
>>
>> On 2012-09-24 23:46, Jon Masamitsu wrote:
>>> NPG: VM Does not unload classes with UseConcMarkSweepGC
>>>
>>> If CMS is not doing class unloading, don't start a concurrent
>>> collection for classloader (and metadata) collection (since
>>> it won't happen without class unloading).
>>
>> It looks like you still unconditionally call expand_and_allocate when
>> running with CMS, no matter the value of CMSClassUnloadingEnabled.
>> I think that the code:
>>
>>  213       // For CMS expand since the collection is going to be
>> concurrent.
>>  214       _result =
>>  215 _loader_data->metaspace_non_null()->expand_and_allocate(_size,
>> _mdtype);
>>
>> Should be inside the "if (CMSClassUnloadingEnabled)" and if running
>> without it set then CMS users will have to take the hit of a stw full
>> gc when running into the metadata threshold.
>>
>> /Mikael
>>
>>>
>>> http://cr.openjdk.java.net/~jmasa/7198873/webrev.00/
>>>
>>> Also, refactored the code for readability and guarded extra
>>> output with Verbose.
>>>
>>> Thanks.
>>>
>>> Jon
>>




More information about the hotspot-gc-dev mailing list