< prev index next >
src/hotspot/share/memory/metaspace.cpp
Print this page
*** 1246,1258 ****
Metachunk* _current_chunk;
// Maximum number of small chunks to allocate to a SpaceManager
static uint const _small_chunk_limit;
! // Maximum number of specialize chunks to allocate for anonymous
// metadata space to a SpaceManager
! static uint const _anon_metadata_specialize_chunk_limit;
// Sum of all space in allocated chunks
size_t _allocated_blocks_words;
// Sum of all allocated chunks
--- 1246,1258 ----
Metachunk* _current_chunk;
// Maximum number of small chunks to allocate to a SpaceManager
static uint const _small_chunk_limit;
! // Maximum number of specialize chunks to allocate for anonymous and delegating
// metadata space to a SpaceManager
! static uint const _anon_and_delegating_metadata_specialize_chunk_limit;
// Sum of all space in allocated chunks
size_t _allocated_blocks_words;
// Sum of all allocated chunks
*** 1416,1426 ****
return raw_word_size;
}
};
uint const SpaceManager::_small_chunk_limit = 4;
! uint const SpaceManager::_anon_metadata_specialize_chunk_limit = 4;
const char* SpaceManager::_expand_lock_name =
"SpaceManager chunk allocation lock";
const int SpaceManager::_expand_lock_rank = Monitor::leaf - 1;
Mutex* const SpaceManager::_expand_lock =
--- 1416,1426 ----
return raw_word_size;
}
};
uint const SpaceManager::_small_chunk_limit = 4;
! uint const SpaceManager::_anon_and_delegating_metadata_specialize_chunk_limit = 4;
const char* SpaceManager::_expand_lock_name =
"SpaceManager chunk allocation lock";
const int SpaceManager::_expand_lock_rank = Monitor::leaf - 1;
Mutex* const SpaceManager::_expand_lock =
*** 3349,3363 ****
// Special case for anonymous metadata space.
// Anonymous metadata space is usually small, with majority within 1K - 2K range and
// rarely about 4K (64-bits JVM).
// Instead of jumping to SmallChunk after initial chunk exhausted, keeping allocation
! // from SpecializeChunk up to _anon_metadata_specialize_chunk_limit (4) reduces space waste
! // from 60+% to around 30%.
! if (_space_type == Metaspace::AnonymousMetaspaceType &&
_mdtype == Metaspace::NonClassType &&
! sum_count_in_chunks_in_use(SpecializedIndex) < _anon_metadata_specialize_chunk_limit &&
word_size + Metachunk::overhead() <= SpecializedChunk) {
return SpecializedChunk;
}
if (chunks_in_use(MediumIndex) == NULL &&
--- 3349,3363 ----
// Special case for anonymous metadata space.
// Anonymous metadata space is usually small, with majority within 1K - 2K range and
// rarely about 4K (64-bits JVM).
// Instead of jumping to SmallChunk after initial chunk exhausted, keeping allocation
! // from SpecializeChunk up to _anon_or_delegating_metadata_specialize_chunk_limit (4)
! // reduces space waste from 60+% to around 30%.
! if ((_space_type == Metaspace::AnonymousMetaspaceType || _space_type == Metaspace::ReflectionMetaspaceType) &&
_mdtype == Metaspace::NonClassType &&
! sum_count_in_chunks_in_use(SpecializedIndex) < _anon_and_delegating_metadata_specialize_chunk_limit &&
word_size + Metachunk::overhead() <= SpecializedChunk) {
return SpecializedChunk;
}
if (chunks_in_use(MediumIndex) == NULL &&
< prev index next >