--- old/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp 2018-09-19 15:53:47.710967900 -0700 +++ new/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp 2018-09-19 15:53:47.086438900 -0700 @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "code/codeCache.hpp" #include "gc/parallel/adjoiningGenerations.hpp" +#include "gc/parallel/adjoiningGenerationsForHeteroHeap.hpp" #include "gc/parallel/adjoiningVirtualSpaces.hpp" #include "gc/parallel/gcTaskManager.hpp" #include "gc/parallel/generationSizer.hpp" @@ -58,7 +59,11 @@ GCTaskManager* ParallelScavengeHeap::_gc_task_manager = NULL; jint ParallelScavengeHeap::initialize() { - const size_t heap_size = _collector_policy->max_heap_byte_size(); + size_t heap_size = _collector_policy->max_heap_byte_size(); + + if (AllocateOldGenAt != NULL && UseAdaptiveGCBoundary) { + heap_size = AdjoiningGenerationsForHeteroHeap::required_reserved_memory(_collector_policy); + } ReservedSpace heap_rs = Universe::reserve_heap(heap_size, _collector_policy->heap_alignment()); @@ -86,7 +91,13 @@ double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0; double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0; - _gens = new AdjoiningGenerations(heap_rs, _collector_policy, generation_alignment()); + if (AllocateOldGenAt != NULL && UseAdaptiveGCBoundary) { + _gens = new AdjoiningGenerationsForHeteroHeap(heap_rs, _collector_policy->max_heap_byte_size() /* total_size_limit */, + _collector_policy, generation_alignment()); + } + else { + _gens = new AdjoiningGenerations(heap_rs, _collector_policy, generation_alignment()); + } _old_gen = _gens->old_gen(); _young_gen = _gens->young_gen(); @@ -104,7 +115,7 @@ GCTimeRatio ); - assert(!UseAdaptiveGCBoundary || + assert(AllocateOldGenAt != NULL || !UseAdaptiveGCBoundary || (old_gen()->virtual_space()->high_boundary() == young_gen()->virtual_space()->low_boundary()), "Boundaries must meet");