Review request: 8024547: MaxMetaspaceSize should limit the committed memory used by the metaspaces
Stefan Karlsson
stefan.karlsson at oracle.com
Wed Oct 9 05:16:39 PDT 2013
On 10/9/13 12:17 PM, Bengt Rutisson wrote:
>
> Hi Stefan,
>
> I think think this looks really good.
Thanks.
>
> Below are a couple of minor nits. Feel free to address them or ignore
> them. I'm fine with you pushing the existing changeset.
>
>
>
> I don't think "special" is a very good name for signaling that we have
> committed all large pages up front. But since that is the name used in
> other code I find it a little confusing to suddenly call it
> "pre_committed" in metaspace.cpp. However, "pre_committed" is a better
> name, so I'm ok with keeping is_pre_committed().
OK. My motivation to create the is_pre_committed() function was to make
the code in VirtualSpaceNode::expand_by easier for the casual reader to
understand.
> But in that case we should probably use it instead of _rs.special() in
> VirtualSpaceNode::initialize().
>
> size_t pre_committed_size = _rs.special() ? _rs.size() : 0;
VirtualSpaceNode::is_pre_committed() operates on _virtual_space and not
_rs, so that won't work.
>
>
> In MetaspaceGC::delta_capacity_until_GC(). Why do we pick min_delta in
> this case?
>
> if (delta <= min_delta) {
> delta = min_delta;
> }
>
> Why not expand with max_delta for the same reason as a slightly larger
> delta?
>
> if (delta <= max_delta) {
> // Don't want to hit the high water mark on the next
> // allocation so make the delta greater than just enough
> // for this allocation.
> delta = max_delta;
> }
I don't know. The logic in the file pre-exists this patch.
>
>
>
> Why did you move Metadebug::deallocate_chunk_a_lot(this,
> grow_chunks_by_words); out into it's own if section?
>
>
> if (next != NULL) {
> Metadebug::deallocate_chunk_a_lot(this, grow_chunks_by_words);
> }
>
> MetaWord* mem = NULL;
>
> // If a chunk was available, add it to the in-use chunk list
> // and do an allocation from it.
> if (next != NULL) {
> // Add to this manager's list of chunks in use.
> add_chunk(next, false);
> mem = next->allocate(word_size);
> }
>
> return mem;
I wanted to separate out the debugging code to make it easier to read
the real allocation code in the if-statement.
thanks,
StefanK
>
> Thanks,
> Bengt
>
>
>
> On 10/8/13 8:21 AM, Stefan Karlsson wrote:
>> Please, review this patch to limit the committed Metaspace memory
>> against the MaxMetaspaceSize flag.
>>
>> http://cr.openjdk.java.net/~stefank/8024547/webrev.00
>>
>> 8024547: MaxMetaspaceSize should limit the committed memory used by
>> the metaspaces
>> Reviewed-by: TBD1, TBD2
>>
>> To simplify the code, the patch is strict about the alignments used
>> to commit and reserve memory in the metaspaces. The Metaspace
>> VirtualSpaces always have addresses and sizes that are aligned
>> against Metaspace::reserve_alignment(). The reserve alignment is
>> os::vm_allocation_granularity() if small pages are used or
>> os::large_page_size() if large pages are used in the Metaspace. The
>> memory is always committed in regions that are size aligned against
>> Metaspace::commit_alignment(). The commit alignment is os:page_size()
>> if small pages are used or os::large_page_size() if late pages are
>> used in the Metaspace. The user can specify the flag
>> -XX:+UseLargePagesInMetaspace to turn on large pages in the metaspaces.
>>
>> The flag initialization was moved out of the CollectorPolicy class.
>> The Metaspace specific flags have been changed to be commit/reserve
>> aligned instead of using heap specific alignments.
>>
>> The output from PrintHeapAtGC has been changed. The redundant "data
>> space" section has been removed. All of used, capacity, committed and
>> reserved are printed. Example:
>> Metaspace used 7644K, capacity 7700K, committed 7808K,
>> reserved 1056768K
>> class space used 804K, capacity 822K, committed 896K, reserved
>> 1048576K
>>
>> Thanks go out to the engineers who have helped out with this bug:
>> Erik, Mikael and Bengt for helping out with parts of the code and
>> testing. Bengt, Coleen, Jesper and Jon for pre-reviewing the changes
>> and providing early feedback.
>>
>> thanks,
>> StefanK
>
More information about the hotspot-dev
mailing list