RFR: 8170395: Metaspace initialization queries the wrong chunk freelist

Michail Chernov michail.chernov at oracle.com
Mon Nov 28 13:57:23 UTC 2016


Hi Stefan,


Could you please add simple regression test for this case?


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