# HG changeset patch # User stuefe # Date 1572167680 -3600 # Node ID 3863dfd99d8eba74021c632ac48ddb25f493eac7 # Parent 5e9e519e5dc9b950fd785106ef9eb462a2409970 Tune chunk sizes to reduce waste sections diff -r 5e9e519e5dc9 -r 3863dfd99d8e src/hotspot/share/memory/metaspace/chunkAllocSequence.cpp --- a/src/hotspot/share/memory/metaspace/chunkAllocSequence.cpp Mon Oct 21 18:15:53 2019 +0200 +++ b/src/hotspot/share/memory/metaspace/chunkAllocSequence.cpp Sun Oct 27 10:14:40 2019 +0100 @@ -59,14 +59,12 @@ // hard-coded chunk allocation sequences for various space types -/////////////////////////// -// chunk allocation sequences for normal loaders: static const chklvl_t g_sequ_standard_non_class[] = { chklvl::CHUNK_LEVEL_4K, chklvl::CHUNK_LEVEL_4K, chklvl::CHUNK_LEVEL_4K, chklvl::CHUNK_LEVEL_4K, - chklvl::CHUNK_LEVEL_64K + chklvl::CHUNK_LEVEL_16K // .. repeat last }; @@ -75,28 +73,28 @@ chklvl::CHUNK_LEVEL_2K, chklvl::CHUNK_LEVEL_2K, chklvl::CHUNK_LEVEL_2K, - chklvl::CHUNK_LEVEL_32K + chklvl::CHUNK_LEVEL_16K // .. repeat last }; -/////////////////////////// -// chunk allocation sequences for reflection/anonymous loaders: -// We allocate four smallish chunks before progressing to bigger chunks. static const chklvl_t g_sequ_anon_non_class[] = { chklvl::CHUNK_LEVEL_1K, - chklvl::CHUNK_LEVEL_1K, - chklvl::CHUNK_LEVEL_1K, - chklvl::CHUNK_LEVEL_1K, - chklvl::CHUNK_LEVEL_2K // .. repeat last }; static const chklvl_t g_sequ_anon_class[] = { chklvl::CHUNK_LEVEL_1K, - chklvl::CHUNK_LEVEL_1K, + // .. repeat last +}; + +static const chklvl_t g_sequ_refl_non_class[] = { + chklvl::CHUNK_LEVEL_2K, + chklvl::CHUNK_LEVEL_1K + // .. repeat last +}; + +static const chklvl_t g_sequ_refl_class[] = { chklvl::CHUNK_LEVEL_1K, - chklvl::CHUNK_LEVEL_1K, - chklvl::CHUNK_LEVEL_2K // .. repeat last }; @@ -107,6 +105,8 @@ DEFINE_CLASS_FOR_ARRAY(standard_class) DEFINE_CLASS_FOR_ARRAY(anon_non_class) DEFINE_CLASS_FOR_ARRAY(anon_class) +DEFINE_CLASS_FOR_ARRAY(refl_non_class) +DEFINE_CLASS_FOR_ARRAY(refl_class) class BootLoaderChunkAllocSequence : public ChunkAllocSequence { @@ -164,7 +164,7 @@ if (is_class) { switch(space_type) { case StandardMetaspaceType: return &g_chunk_alloc_sequence_standard_class; - case ReflectionMetaspaceType: + case ReflectionMetaspaceType: return &g_chunk_alloc_sequence_refl_class; case UnsafeAnonymousMetaspaceType: return &g_chunk_alloc_sequence_anon_class; case BootMetaspaceType: return &g_chunk_alloc_sequence_boot_non_class; default: ShouldNotReachHere(); @@ -172,7 +172,7 @@ } else { switch(space_type) { case StandardMetaspaceType: return &g_chunk_alloc_sequence_standard_non_class; - case ReflectionMetaspaceType: + case ReflectionMetaspaceType: return &g_chunk_alloc_sequence_refl_non_class; case UnsafeAnonymousMetaspaceType: return &g_chunk_alloc_sequence_anon_non_class; case BootMetaspaceType: return &g_chunk_alloc_sequence_boot_non_class; default: ShouldNotReachHere();