src/hotspot/share/gc/shared/genCollectedHeap.cpp
changeset 58015 dd84de796f2c
parent 57972 374f3f9dda6f
child 58063 bdf136b8ae0e
child 58679 9c3209ff7550
child 59053 ba6c248cae19
equal deleted inserted replaced
58014:aba258cd7df8 58015:dd84de796f2c
   103   // HeapWordSize).
   103   // HeapWordSize).
   104   guarantee(HeapWordSize == wordSize, "HeapWordSize must equal wordSize");
   104   guarantee(HeapWordSize == wordSize, "HeapWordSize must equal wordSize");
   105 
   105 
   106   // Allocate space for the heap.
   106   // Allocate space for the heap.
   107 
   107 
   108   char* heap_address;
   108   ReservedHeapSpace heap_rs = allocate(HeapAlignment);
   109   ReservedSpace heap_rs;
       
   110 
       
   111   heap_address = allocate(HeapAlignment, &heap_rs);
       
   112 
   109 
   113   if (!heap_rs.is_reserved()) {
   110   if (!heap_rs.is_reserved()) {
   114     vm_shutdown_during_initialization(
   111     vm_shutdown_during_initialization(
   115       "Could not reserve enough space for object heap");
   112       "Could not reserve enough space for object heap");
   116     return JNI_ENOMEM;
   113     return JNI_ENOMEM;
   117   }
   114   }
   118 
   115 
   119   initialize_reserved_region((HeapWord*)heap_rs.base(), (HeapWord*)(heap_rs.base() + heap_rs.size()));
   116   initialize_reserved_region(heap_rs);
   120 
   117 
   121   _rem_set = create_rem_set(reserved_region());
   118   _rem_set = create_rem_set(heap_rs.region());
   122   _rem_set->initialize();
   119   _rem_set->initialize();
   123   CardTableBarrierSet *bs = new CardTableBarrierSet(_rem_set);
   120   CardTableBarrierSet *bs = new CardTableBarrierSet(_rem_set);
   124   bs->initialize();
   121   bs->initialize();
   125   BarrierSet::set_barrier_set(bs);
   122   BarrierSet::set_barrier_set(bs);
   126 
   123 
   127   ReservedSpace young_rs = heap_rs.first_part(_young_gen_spec->max_size(), false, false);
   124   ReservedSpace young_rs = heap_rs.first_part(_young_gen_spec->max_size(), false, false);
   128   _young_gen = _young_gen_spec->init(young_rs, rem_set());
   125   _young_gen = _young_gen_spec->init(young_rs, rem_set());
   129   heap_rs = heap_rs.last_part(_young_gen_spec->max_size());
   126   ReservedSpace old_rs = heap_rs.last_part(_young_gen_spec->max_size());
   130 
   127 
   131   ReservedSpace old_rs = heap_rs.first_part(_old_gen_spec->max_size(), false, false);
   128   old_rs = old_rs.first_part(_old_gen_spec->max_size(), false, false);
   132   _old_gen = _old_gen_spec->init(old_rs, rem_set());
   129   _old_gen = _old_gen_spec->init(old_rs, rem_set());
   133   clear_incremental_collection_failed();
   130   clear_incremental_collection_failed();
   134 
   131 
   135   return JNI_OK;
   132   return JNI_OK;
   136 }
   133 }
   148                                         init_survivor_size,
   145                                         init_survivor_size,
   149                                         max_gc_pause_sec,
   146                                         max_gc_pause_sec,
   150                                         GCTimeRatio);
   147                                         GCTimeRatio);
   151 }
   148 }
   152 
   149 
   153 char* GenCollectedHeap::allocate(size_t alignment,
   150 ReservedHeapSpace GenCollectedHeap::allocate(size_t alignment) {
   154                                  ReservedSpace* heap_rs){
       
   155   // Now figure out the total size.
   151   // Now figure out the total size.
   156   const size_t pageSize = UseLargePages ? os::large_page_size() : os::vm_page_size();
   152   const size_t pageSize = UseLargePages ? os::large_page_size() : os::vm_page_size();
   157   assert(alignment % pageSize == 0, "Must be");
   153   assert(alignment % pageSize == 0, "Must be");
   158 
   154 
   159   // Check for overflow.
   155   // Check for overflow.
   164   }
   160   }
   165   assert(total_reserved % alignment == 0,
   161   assert(total_reserved % alignment == 0,
   166          "Gen size; total_reserved=" SIZE_FORMAT ", alignment="
   162          "Gen size; total_reserved=" SIZE_FORMAT ", alignment="
   167          SIZE_FORMAT, total_reserved, alignment);
   163          SIZE_FORMAT, total_reserved, alignment);
   168 
   164 
   169   *heap_rs = Universe::reserve_heap(total_reserved, alignment);
   165   ReservedHeapSpace heap_rs = Universe::reserve_heap(total_reserved, alignment);
   170 
   166 
   171   os::trace_page_sizes("Heap",
   167   os::trace_page_sizes("Heap",
   172                        MinHeapSize,
   168                        MinHeapSize,
   173                        total_reserved,
   169                        total_reserved,
   174                        alignment,
   170                        alignment,
   175                        heap_rs->base(),
   171                        heap_rs.base(),
   176                        heap_rs->size());
   172                        heap_rs.size());
   177 
   173 
   178   return heap_rs->base();
   174   return heap_rs;
   179 }
   175 }
   180 
   176 
   181 class GenIsScavengable : public BoolObjectClosure {
   177 class GenIsScavengable : public BoolObjectClosure {
   182 public:
   178 public:
   183   bool do_object_b(oop obj) {
   179   bool do_object_b(oop obj) {