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) { |