Review request: 8025096: Move the ChunkManager instances out of the VirtualSpaceLists
Coleen Phillmore
coleen.phillimore at oracle.com
Fri Sep 20 04:54:55 PDT 2013
Thanks, Stefan.
On 9/20/2013 2:09 AM, Stefan Karlsson wrote:
> On 9/20/13 4:14 AM, Coleen Phillmore wrote:
>>
>> Stefan,
>>
>> Thanks for sending this to hotspot-dev. This change seems okay but
>> the original intent was that the free chunks went along with their
>> virtual space list, which manage the list of mmap spaces. So that's
>> why they were contained by VirtualSpaceList. And ChunkManager was
>> more hidden - nobody was supposed to know about it.
>
> But that's not what the code looked like. All over the place you
> called vs_list()->chunk_manager()->... On only a few places where
> ChunkManager really used directly by the VirtualSpaceList.
>
>>
>> Now all the SpaceManagers have an extra pointer, and there are two
>> space managers per class loader in the case of compressed class
>> pointers, so that could add up to an interesting amount of extra
>> memory, especially for 2M anonymous classes.
>
> I see your point. But if that memory wastage is that important, then I
> don't understand why the SpaceManager has a VirtualSpaceList* _vs_list
> field, when the correct VSL can be fetched globally as you suggest
> below that I do with SpaceManager::chunk_manager().
See below. The _mdtype field is new.
>
> There are even more space savings to be made in the SpaceManager
> class. The _medium_chunk_bunch isn't used at all, for example.
Great. We can remove that too with a different edit.
>
>>
>> Since SpaceManager has a back pointer to VirtualSpaceList, you could
>> still have ChunkManager belong to VSL and indirectly get them:
>> SpaceManager::chunk_manager() { return _vs_list->chunk_manager(); }
>>
>> Of if you don't like that, you could have:
>>
>> SpaceManager::chunk_manager() { return *_mdtype ==
>> Metaspace::ClassType ? _chunk_manager_class : the other one; }
>
> Sure. I can do that, but then I would like to do the same for the
> VirtualSpaceList* _vs_list.
>
>>
>> *The C heap allocation looks a lot cleaner, and the change to
>> get_new_chunk, which is the main purpose of this change looks really
>> good. I'm just worried about the extra footprint and there is
>> already _vs_list. Maybe neither is needed and could be fetched by
>> _mdtype, which wasn't there when _vs_list was added.
>
> Yes.
>
>> Can you adjust your change to not add this memory? Or file a new
>> bug to remove the additional footprint after this?
>
> I'll move out _chunk_manager and _vs_list from SpaceManager, and send
> out a new review request later today.
Thanks!!
Coleen
>
> thanks for your input,
> StefanK
>>
>> Thanks,
>> Coleen
>>
>> On 9/19/2013 3:48 PM, Stefan Karlsson wrote:
>>> http://cr.openjdk.java.net/~stefank/8025096/webrev.00/
>>> https://bugs.openjdk.java.net/browse/JDK-8025096
>>>
>>> In the fix for 'JDK-8024547
>>> <https://bugs.openjdk.java.net/browse/JDK-8024547>: MaxMetaspaceSize
>>> should limit the committed memory used by the metaspaces' we need to
>>> make a clearer distinction between when new memory is committed and
>>> when memory is allocated inside already committed memory.
>>>
>>> Moving the ChunkManager, which handles the free chunk list, out of
>>> the VirtualSpaceList, which handles the committed metaspace memory,
>>> is a step in that direction.
>>>
>>> Changes:
>>> - Move the ChunkManager instances from VirtualSpaceList to
>>> SpaceManager.
>>> - Move the inc_container_count() into ChunkManager::free_chunks_get.
>>> Now the Chunk manager calls dec_container_count when chunks are
>>> inserted in the chunk free list and inc_container_count when chunks
>>> are removed from the chunk free list.
>>> - Moved the ChunkManager::chunk_freelist_allocate() call out from
>>> the VirtualSpaceList::get_new_chunk()
>>>
>>> thanks,
>>> StefanK
>>
>
More information about the hotspot-dev
mailing list