src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp
Print this page
*** 41,50 ****
--- 41,51 ----
#include "gc_implementation/shared/gcHeapSummary.hpp"
#include "gc_implementation/shared/gcTimer.hpp"
#include "gc_implementation/shared/gcTrace.hpp"
#include "gc_implementation/shared/gcTraceTime.hpp"
#include "gc_implementation/shared/isGCActiveMark.hpp"
+ #include "gc_implementation/shared/spaceDecorator.hpp"
#include "gc_interface/gcCause.hpp"
#include "memory/gcLocker.inline.hpp"
#include "memory/referencePolicy.hpp"
#include "memory/referenceProcessor.hpp"
#include "oops/methodData.hpp"
*** 2113,2122 ****
--- 2114,2130 ----
// Don't check if the size_policy is ready here. Let
// the size_policy check that internally.
if (UseAdaptiveGenerationSizePolicyAtMajorCollection &&
((gc_cause != GCCause::_java_lang_system_gc) ||
UseAdaptiveSizePolicyWithSystemGC)) {
+ // Swap the survivor spaces if from_space is empty
+ if (UseAdaptiveSizePolicyResizeYoungGenAtMajorCollection &&
+ young_gen->from_space()->is_empty()) {
+ young_gen->from_space()->clear(SpaceDecorator::Mangle);
+ young_gen->swap_spaces();
+ }
+
// Calculate optimal free space amounts
assert(young_gen->max_size() >
young_gen->from_space()->capacity_in_bytes() +
young_gen->to_space()->capacity_in_bytes(),
"Sizes of space in young gen are out-of-bounds");
*** 2152,2167 ****
size_policy->decay_supplemental_growth(true /* full gc*/);
heap->resize_old_gen(
size_policy->calculated_old_free_size_in_bytes());
! // Don't resize the young generation at an major collection. A
! // desired young generation size may have been calculated but
! // resizing the young generation complicates the code because the
! // resizing of the old generation may have moved the boundary
! // between the young generation and the old generation. Let the
! // young generation resizing happen at the minor collections.
}
if (PrintAdaptiveSizePolicy) {
gclog_or_tty->print_cr("AdaptiveSizeStop: collection: %d ",
heap->total_collections());
}
--- 2160,2173 ----
size_policy->decay_supplemental_growth(true /* full gc*/);
heap->resize_old_gen(
size_policy->calculated_old_free_size_in_bytes());
! if (UseAdaptiveSizePolicyResizeYoungGenAtMajorCollection) {
! heap->resize_young_gen(size_policy->calculated_eden_size_in_bytes(),
! size_policy->calculated_survivor_size_in_bytes());
! }
}
if (PrintAdaptiveSizePolicy) {
gclog_or_tty->print_cr("AdaptiveSizeStop: collection: %d ",
heap->total_collections());
}