< prev index next >

src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp

Print this page

        

@@ -23,10 +23,11 @@
  */
 
 #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"
 #include "gc/parallel/objectStartArray.inline.hpp"
 #include "gc/parallel/parallelScavengeHeap.inline.hpp"

@@ -56,11 +57,15 @@
 PSAdaptiveSizePolicy* ParallelScavengeHeap::_size_policy = NULL;
 PSGCAdaptivePolicyCounters* ParallelScavengeHeap::_gc_policy_counters = NULL;
 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());
 
   os::trace_page_sizes("Heap",
                        _collector_policy->min_heap_byte_size(),

@@ -84,11 +89,17 @@
   // size of the generation as the boundaries currently stand.
   // _max_gen_size is still used as that value.
   double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0;
   double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0;
 
+  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();
 
   const size_t eden_capacity = _young_gen->eden_space()->capacity_in_bytes();

@@ -102,11 +113,11 @@
                              max_gc_pause_sec,
                              max_gc_minor_pause_sec,
                              GCTimeRatio
                              );
 
-  assert(!UseAdaptiveGCBoundary ||
+  assert(AllocateOldGenAt != NULL || !UseAdaptiveGCBoundary ||
     (old_gen()->virtual_space()->high_boundary() ==
      young_gen()->virtual_space()->low_boundary()),
     "Boundaries must meet");
   // initialize the policy counters - 2 collectors, 2 generations
   _gc_policy_counters =
< prev index next >