--- old/src/hotspot/share/gc/g1/g1CollectedHeap.cpp 2020-02-12 17:18:32.725486860 +0800 +++ new/src/hotspot/share/gc/g1/g1CollectedHeap.cpp 2020-02-12 17:18:32.727486932 +0800 @@ -2426,6 +2426,10 @@ return _hrm->max_length() * HeapRegion::GrainBytes; } +size_t G1CollectedHeap::soft_max_capacity() const { + return clamp(align_up(SoftMaxHeapSize, HeapAlignment), MinHeapSize, max_capacity()); +} + jlong G1CollectedHeap::millis_since_last_gc() { // See the notes in GenCollectedHeap::millis_since_last_gc() // for more information about the implementation. @@ -2952,16 +2956,41 @@ verify_numa_regions("GC End"); } -void G1CollectedHeap::expand_heap_after_young_collection(){ - size_t expand_bytes = _heap_sizing_policy->expansion_amount(); +void G1CollectedHeap::resize_heap_after_young_collection() { + Ticks start = Ticks::now(); + if (!expand_heap_after_young_collection()) { + // If we don't attempt to expand heap, try if we need to shrink the heap + shrink_heap_after_young_collection(); + } + phase_times()->record_resize_heap_time((Ticks::now() - start).seconds() * 1000.0); +} + +bool G1CollectedHeap::expand_heap_after_young_collection(){ + size_t expand_bytes = _heap_sizing_policy->expansion_amount_after_young_collection(); if (expand_bytes > 0) { - // No need for an ergo logging here, - // expansion_amount() does this when it returns a value > 0. - double expand_ms; - if (!expand(expand_bytes, _workers, &expand_ms)) { + if (expand(expand_bytes, _workers, NULL)) { // We failed to expand the heap. Cannot do anything about it. } - phase_times()->record_expand_heap_time(expand_ms); + return true; + } + return false; +} + +void G1CollectedHeap::shrink_heap_after_young_collection() { + if (!collector_state()->finish_of_mixed_gc()) { + // Do the shrink only after finish of mixed gc + return; + } + size_t shrink_bytes = _heap_sizing_policy->shrink_amount_after_mixed_collections(); + if (shrink_bytes > 0) { + shrink(shrink_bytes); + } +} + +void G1CollectedHeap::expand_heap_after_concurrent_mark() { + size_t expand_bytes = _heap_sizing_policy->expansion_amount_after_concurrent_mark(); + if (expand_bytes > 0) { + expand(expand_bytes, _workers, NULL); } } @@ -3117,7 +3146,7 @@ _allocator->init_mutator_alloc_regions(); - expand_heap_after_young_collection(); + resize_heap_after_young_collection(); double sample_end_time_sec = os::elapsedTime(); double pause_time_ms = (sample_end_time_sec - sample_start_time_sec) * MILLIUNITS;