-XX:MetaspaceSize is correct?
Yasumasa Suenaga
yasuenag at gmail.com
Tue Apr 15 13:38:17 UTC 2014
I uploaded new webrev:
http://cr.openjdk.java.net/~ysuenaga/JDK-8039867/webrev.01/
Please review and sponsoring.
Yasumasa
On 04/15/2014 12:48 PM, Yasumasa Suenaga wrote:
> Jon,
>
> I agree with you.
>
> MetaspaceSize is used as minimum value when JVM shrink capacity in
> MetaspaceGC::compute_new_size() .
> So I will change description to "minimum" and upload new webrev.
>
>
> Yasumasa
>
> 2014-04-15 7:58 GMT+09:00, Jon Masamitsu <jon.masamitsu at oracle.com>:
>> Yasumasa,
>>
>> It's hard to describe what this parameter is in a single
>> sentence. "high-water-mark" doesn't mean much unless
>> you know about how it is used in the GC. Although
>> "initial" is not right in the description, "minimum" might
>> be closer to a good description. I'm really not sure.
>>
>> Jon
>>
>> On 04/10/2014 05:20 AM, Yasumasa Suenaga wrote:
>>> 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