RFR 8015391: NPG: With -XX:+UseCompressedKlassPointers OOME due to exhausted metadat, a space could occur when metaspace is almost empty

Coleen Phillimore coleen.phillimore at oracle.com
Mon Jun 24 11:23:28 PDT 2013


On 06/24/2013 01:46 PM, Jon Masamitsu wrote:
> http://cr.openjdk.java.net/~coleenp/8015391/src/share/vm/memory/metaspace.cpp.frames.html
>
>> 2673   size_t specialized_count = 0, small_count = 0, medium_count = 0, large_count = 0;
>> 2675   size_t cls_specialized_count = 0, cls_small_count = 0, cls_medium_count = 0, cls_large_count = 0;
>
> Not introduced by your change but
>
> humongous_count instead of large_count
> and
> cls_humongous_count instead of cls_large_count
>
> would be more consistent.

Yes, it is.  I changed it.

>
> http://cr.openjdk.java.net/~coleenp/8015391/src/share/vm/classfile/classLoaderData.cpp.frames.html
>
> I'd suggest adding Metaspace::AppClassMetaspaceType
>>   385     } else if (SystemDictionary::is_app_class_loader(class_loader())) {
>>   386       if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
>>   387         tty->print_cr("sun/misc/Launcher$AppClassLoader class loader");
>>   388       }
>>   389       set_metaspace(new Metaspace(_metaspace_lock, Metaspace::BootMetaspaceType));
> and adding a flag InitialAppClassLoaderMetaspaceSize.  It's not 
> obvious to me
> that we should always be reserving  the same amount of space for the 
> AppClassLoader
> as the BootClassLoader.   The same default is OK with me.

Hmm.  Ok.  I don't like adding new flags, so can I add an 
AppMetaspaceType and give it the same initial size as BootMetaspaceSize 
until proven that it doesn't need to be the same size.

I suppose adding an AppMetaspaceInitialSize flag will give me more to 
talk about at the Permgen Elimination JavaOne talk though (but I'd still 
rather not).

Coleen

>
> Rest looks good.
>
> Jon
>
>
> On 6/20/13 9:26 AM, Coleen Phillimore wrote:
>> Summary: Allocate medium chunks for class metaspace when class loader 
>> has lots of classes
>>
>> I originally made class metaspace keep small chunks and not start 
>> allocating from medium chunks, because I thought with only Klass 
>> objects, small chunks is enough.  This test has a large set of class 
>> loaders who have a lot of classes, so allocated thousands of small 
>> chunks each.  Class loaders with that many classes should start 
>> allocating from medium chunks, for class metaspace.
>>
>> I also increased the ClassMediumChunk size to 4k and measured a lot 
>> less fragmentation waste than 1K or 2K for this test. Lastly, the 
>> AppClassLoader instance should have as large of an initial metaspace 
>> as the bootclass loader.
>>
>> Tested with vm.quick.testlist and the failing test.
>>
>> open webrev at http://cr.openjdk.java.net/~coleenp/8015391/
>> bug link at http://bugs.sun.com/view_bug.do?bug_id=8015391
>> local bug link https://jbs.oracle.com/bugs/browse/JDK-8015391
>>
>> Thanks,
>> Coleen
>>
>



More information about the hotspot-dev mailing list