RFR: 8170395: Metaspace initialization queries the wrong chunk freelist

Stefan Karlsson stefan.karlsson at oracle.com
Mon Nov 28 19:29:29 UTC 2016


Hi Michail,

On 2016-11-28 14:57, Michail Chernov wrote:
> Hi Stefan,
>
>
> Could you please add simple regression test for this case?
The failure below was found with one of the test cases in:
runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java

Is this enough or do you want an explicit regression test that simply 
invokes:
java -XX:InitialBootClassLoaderMetaspaceSize=30720 -version ?

Thanks,
StefanK

>
>
> Thanks,
>
> Michail
>
>
> On 28.11.2016 16:52, Stefan Karlsson wrote:
>> Hi all,
>>
>> Please, review this patch to fix metaspace initialization.
>>
>> http://cr.openjdk.java.net/~stefank/8170395/webrev.01/
>> https://bugs.openjdk.java.net/browse/JDK-8170395
>>
>> The fix for JDK-8169931 introduced a new assert to ensure that we 
>> always try to allocate chunks that are any of the three fixed sizes 
>> (specialized, small, medium) or a humongous chunk (if it is larger 
>> then the medium chunk size).
>>
>> During metaspace initialization an initial metaspace chunk is 
>> allocated. The size of some of the metaspace instances can be 
>> specified on the command line. For example:
>> java -XX:InitialBootClassLoaderMetaspaceSize=30720 -version
>>
>> If this size is smaller than the medium chunk size and at the same 
>> time doesn't match the specialized or small chunk size, then we end 
>> up hitting the assert mentioned above:
>> #
>> # Internal Error 
>> (/scratch/opt/jprt/T/P1/142848.erik/s/hotspot/src/share/vm/memory/metaspace.cpp:2359), 
>> pid=31643, tid=31646
>> # assert(size > free_chunks(MediumIndex)->size()) failed: Not a 
>> humongous chunk
>> #
>>
>> ========================================================================
>>
>> The most important part of the fix is this line:
>> +  // Adjust to one of the fixed chunk sizes (unless humongous)
>> +  const size_t adjusted = adjust_initial_chunk_size(requested);
>>
>> which ensures that we always request either of a specialized, small, 
>> medium, or humongous chunk size, even if the requested size is 
>> neither of these.
>>
>> Most of the other code is refactoring to unify the non-class 
>> metaspace and the class metaspace code paths to get rid of some of 
>> the existing code duplication, bring the chunk size calculation 
>> nearer to the the actual chunk allocation, and make it easier to 
>> write a unit test for the new adjust_initial_chunk_size function.
>>
>> ========================================================================
>>
>> The patch for JDK-8169931 was backed out with JDK-8170355 and will be 
>> reintroduced as JDK-8170358 when this patch has been reviewed and 
>> pushed.
>>
>> Testing: jprt, unit test, parts of PIT testing (including CDS tests), 
>> failing test
>>
>> Thanks,
>> StefanK
>



More information about the hotspot-dev mailing list