Request for review: JDK-8009561 NPG: Metaspace fragmentation when retiring a Metachunk
Mikael Gerdin
mikael.gerdin at oracle.com
Wed Aug 14 12:59:27 UTC 2013
Hi,
After some discussions and some benchmarking I have a new version of the
change:
http://cr.openjdk.java.net/~mgerdin/8009561/webrev.1/
The idea is to use FreeBlockDictionary<Metablock>::atLeast but limiting
the splitting of large blocks by refusing the allocation if the block
returned from the freelist is 4x larger than the allocation request.
I also reduced the freelist allocation threshold since 64k seems too
large for what is in effect a per-ClassLoaderData freelist.
/Mikael
On 2013-06-05 16:04, Mikael Gerdin wrote:
> Hi,
>
> Can I have some reviews of this small fix to the Metaspace memory
> allocation path.
>
> Problem:
> When a Metaspace allocation request cannot be satisfied by the current
> chunk the chunk is retired and a new chunk is requested. This causes
> whatever is left in the chunk to be effectively leaked.
>
> Suggested fix:
> Put the remaining memory in each chunk on the Metablock freelist so it
> can be used to satisfy future allocations.
>
> Possible addition:
> When allocating from the block free list, use
> FreeBlockDictionary<Metablock>::atLeast instead of
> FreeBlockDictionary<Metablock>::exactly and split the Metablock if it's
> large enough.
>
> One might argue that this increases the fragmentation of the memory on
> the block free list but I think that we primarily want to use the block
> free list for small allocations and allocate from chunks for large
> allocations.
>
> Webrev:
> Only fix:
> http://cr.openjdk.java.net/~mgerdin/8009561/webrev.0/
>
> Incremental webrev for splitting blocks:
> http://cr.openjdk.java.net/~mgerdin/8009561/webrev.0%2b/
>
> Bug links:
> https://jbs.oracle.com/bugs/browse/JDK-8009561
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8009561
>
> Thanks
> /Mikael
More information about the hotspot-gc-dev
mailing list