-XX:MetaspaceSize is correct?

Yasumasa Suenaga yasuenag at gmail.com
Thu Apr 10 12:20:38 UTC 2014


I uploaded webrev:
http://cr.openjdk.java.net/~ysuenaga/JDK-8039867/webrev.00/

Please review and sponsoring!


Yasumasa


On 04/10/2014 12:37 PM, Yasumasa Suenaga wrote:
> Hi Jon,
> Thank you for replying.
>
> I filed this issue as JDK-8039867: Incorrect description: -XX:MetaspaceSize .
>
> I attached a patch to this entry.
> I will upload webrev later.
>
>
> Thanks,
>
> Yasumasa
>
>
>
> 2014-04-10 6:51 GMT+09:00, Jon Masamitsu <jon.masamitsu at oracle.com>:
>> On 04/09/2014 06:22 AM, Yasumasa Suenaga wrote:
>>> Hi all,
>>>
>>> I checked initial metaspace size through jcmd PerfCounter.print .
>>> However, it seems to be incorrect:
>>>
>>>   - Java command:
>>>    java -XX:-UseCompressedClassPointers -XX:+PrintFlagsFinal LongSleep
>>>
>>>   - Output from -XX:+PrintFlagsFinal:
>>>      uintx MetaspaceSize                             =
>>> 21807104                            {pd product}
>>>
>>>   - Result of "PerfCounter.print"
>>> sun.gc.metaspace.capacity=4194304
>>> sun.gc.metaspace.maxCapacity=8388608
>>> sun.gc.metaspace.minCapacity=0
>>>
>>>
>>> I checked metaspace.cpp, initial size of metaspace is detected by
>>> InitialBootClassLoaderMetaspaceSize.
>>> However, description of MetaspaceSize in globals.hpp is
>>> "Initial size of Metaspaces (in bytes)" .
>>>
>>> Is description of MetaspaceSize is correct?
>> Description is not correct.
>>
>>> And this behavior is correct?
>> Behavior is correct.
>>
>>> I have two plan for this mismatch:
>>>
>>>   A) Change description of MetaspaceSize
>>>    MetaspaceSize is used to HWM in metaspace.cpp .
>>>    So we should change description for this behavior.
>>> ------------
>>> diff -r 48ce2e6e1add src/share/vm/runtime/globals.hpp
>>> --- a/src/share/vm/runtime/globals.hpp  Fri Apr 04 10:04:44 2014 -0700
>>> +++ b/src/share/vm/runtime/globals.hpp  Wed Apr 09 22:05:18 2014 +0900
>>> @@ -3160,7 +3156,7 @@
>>>             "non-daemon thread (in
>>> bytes)")                                   \
>>> \
>>>     product_pd(uintx,
>>> MetaspaceSize,                                          \
>>> -          "Initial size of Metaspaces (in
>>> bytes)")                          \
>>> +          "Initial HWM of Metaspaces (in
>>> bytes)")                           \
>> Explain what HWM is if you're going to use it.
>>
>>> \
>>>     product(uintx, MaxMetaspaceSize,
>>> max_uintx,                               \
>>>             "Maximum size of Metaspaces (in
>>> bytes)")                          \
>>> ------------
>>>
>>>   B) Remove InitialBootClassLoaderMetaspaceSize and use MetaspaceSize
>>>    In currently, InitialBootClassLoaderMetaspaceSize is used to initialize
>>>    metaspace.
>>>    InitialBootClassLoaderMetaspaceSize is only to use for it.
>>>    Thus we should remove this option and use MetaspaceSize to initialize
>>>    metaspace.
>> InitialBootClassLoaderMetaspaceSize is an optimization.  It allows
>> approximately
>> enough space for the system classes without repeated  allocations of
>> Metaspaces.
>> Not everyone agrees with this optimization but I would like it kept.
>>
>>> ------------
>>> diff -r 48ce2e6e1add src/share/vm/memory/metaspace.cpp
>>> --- a/src/share/vm/memory/metaspace.cpp Fri Apr 04 10:04:44 2014 -0700
>>> +++ b/src/share/vm/memory/metaspace.cpp Wed Apr 09 22:05:18 2014 +0900
>>> @@ -3172,7 +3172,7 @@
>>>   #endif
>>>
>>>       // Initialize these before initializing the VirtualSpaceList
>>> -    _first_chunk_word_size = InitialBootClassLoaderMetaspaceSize /
>>> BytesPerWord;
>>> +    _first_chunk_word_size = MetaspaceSize / BytesPerWord;
>>>       _first_chunk_word_size = align_word_size_up(_first_chunk_word_size);
>>>       // Make the first class chunk bigger than a medium chunk so it's
>>> not put
>>>       // on the medium chunk list.   The next chunk will be small and
>>> progress
>>> diff -r 48ce2e6e1add src/share/vm/runtime/globals.hpp
>>> --- a/src/share/vm/runtime/globals.hpp  Fri Apr 04 10:04:44 2014 -0700
>>> +++ b/src/share/vm/runtime/globals.hpp  Wed Apr 09 22:05:18 2014 +0900
>>> @@ -2333,10 +2333,6 @@
>>>     develop(bool, TraceClassLoaderData,
>>> false,                                \
>>>             "Trace class loader loader_data
>>> lifetime")                        \
>>> \
>>> -  product(uintx,
>>> InitialBootClassLoaderMetaspaceSize,                       \
>>> -          NOT_LP64(2200*K)
>>> LP64_ONLY(4*M),                                  \
>>> -          "Initial size of the boot class loader data
>>> metaspace")           \
>>> - \
>>>     product(bool, TraceGen0Time,
>>> false,                                       \
>>>             "Trace accumulated time for Gen 0
>>> collection")                    \
>>> \
>>> ------------
>>>
>>> I prefer "B" .
>>> Because, I guess many users think MetaspaceSize decides initial
>>> metaspace size.
>>>
>>> If my idea is correct, I will file this to JBS and upload patch to
>>> webrev.
>> Please only correct the description of MetaspaceSize.
>>
>> Jon
>>
>>>
>>> Thanks,
>>>
>>> Yasumasa
>>>
>>




More information about the hotspot-gc-dev mailing list