mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 19:14:38 +02:00
Merge
This commit is contained in:
commit
2f7b91d2f5
6 changed files with 219 additions and 122 deletions
|
@ -1103,25 +1103,24 @@ size_t MetaspaceGC::delta_capacity_until_GC(size_t word_size) {
|
|||
}
|
||||
|
||||
bool MetaspaceGC::should_expand(VirtualSpaceList* vsl, size_t word_size) {
|
||||
// If the user wants a limit, impose one.
|
||||
if (!FLAG_IS_DEFAULT(MaxMetaspaceSize) &&
|
||||
MetaspaceAux::reserved_in_bytes() >= MaxMetaspaceSize) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Class virtual space should always be expanded. Call GC for the other
|
||||
// metadata virtual space.
|
||||
if (vsl == Metaspace::class_space_list()) return true;
|
||||
|
||||
// If the user wants a limit, impose one.
|
||||
size_t max_metaspace_size_words = MaxMetaspaceSize / BytesPerWord;
|
||||
size_t metaspace_size_words = MetaspaceSize / BytesPerWord;
|
||||
if (!FLAG_IS_DEFAULT(MaxMetaspaceSize) &&
|
||||
vsl->capacity_words_sum() >= max_metaspace_size_words) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If this is part of an allocation after a GC, expand
|
||||
// unconditionally.
|
||||
if(MetaspaceGC::expand_after_GC()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t metaspace_size_words = MetaspaceSize / BytesPerWord;
|
||||
|
||||
// If the capacity is below the minimum capacity, allow the
|
||||
// expansion. Also set the high-water-mark (capacity_until_GC)
|
||||
// to that minimum capacity so that a GC will not be induced
|
||||
|
@ -1311,8 +1310,7 @@ void MetaspaceGC::compute_new_size() {
|
|||
gclog_or_tty->print_cr(" metaspace HWM: %.1fK", new_capacity_until_GC / (double) K);
|
||||
}
|
||||
}
|
||||
assert(vsl->used_bytes_sum() == used_after_gc &&
|
||||
used_after_gc <= vsl->capacity_bytes_sum(),
|
||||
assert(used_after_gc <= vsl->capacity_bytes_sum(),
|
||||
"sanity check");
|
||||
|
||||
}
|
||||
|
@ -1972,6 +1970,9 @@ void SpaceManager::initialize() {
|
|||
}
|
||||
|
||||
SpaceManager::~SpaceManager() {
|
||||
// This call this->_lock which can't be done while holding expand_lock()
|
||||
const size_t in_use_before = sum_capacity_in_chunks_in_use();
|
||||
|
||||
MutexLockerEx fcl(SpaceManager::expand_lock(),
|
||||
Mutex::_no_safepoint_check_flag);
|
||||
|
||||
|
@ -1989,7 +1990,7 @@ SpaceManager::~SpaceManager() {
|
|||
|
||||
// Have to update before the chunks_in_use lists are emptied
|
||||
// below.
|
||||
chunk_manager->inc_free_chunks_total(sum_capacity_in_chunks_in_use(),
|
||||
chunk_manager->inc_free_chunks_total(in_use_before,
|
||||
sum_count_in_chunks_in_use());
|
||||
|
||||
// Add all the chunks in use by this space manager
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue