@@ -192,6 +192,10 @@ jint ShenandoahHeap::initialize() {
192
192
193
193
assert ((((size_t ) base ()) & ShenandoahHeapRegion::region_size_bytes_mask ()) == 0 ,
194
194
" Misaligned heap: " PTR_FORMAT, p2i (base ()));
195
+ os::trace_page_sizes_for_requested_size (" Heap" ,
196
+ max_byte_size, heap_alignment,
197
+ heap_rs.base (),
198
+ heap_rs.size (), heap_rs.page_size ());
195
199
196
200
#if SHENANDOAH_OPTIMIZED_MARKTASK
197
201
// The optimized ShenandoahMarkTask takes some bits away from the full object bits.
@@ -215,8 +219,8 @@ jint ShenandoahHeap::initialize() {
215
219
// Reserve and commit memory for bitmap(s)
216
220
//
217
221
218
- _bitmap_size = ShenandoahMarkBitMap::compute_size (heap_rs.size ());
219
- _bitmap_size = align_up (_bitmap_size , bitmap_page_size);
222
+ size_t bitmap_size_orig = ShenandoahMarkBitMap::compute_size (heap_rs.size ());
223
+ _bitmap_size = align_up (bitmap_size_orig , bitmap_page_size);
220
224
221
225
size_t bitmap_bytes_per_region = reg_size_bytes / ShenandoahMarkBitMap::heap_map_factor ();
222
226
@@ -242,6 +246,10 @@ jint ShenandoahHeap::initialize() {
242
246
_bitmap_bytes_per_slice, bitmap_page_size);
243
247
244
248
ReservedSpace bitmap (_bitmap_size, bitmap_page_size);
249
+ os::trace_page_sizes_for_requested_size (" Mark Bitmap" ,
250
+ bitmap_size_orig, bitmap_page_size,
251
+ bitmap.base (),
252
+ bitmap.size (), bitmap.page_size ());
245
253
MemTracker::record_virtual_memory_type (bitmap.base (), mtGC);
246
254
_bitmap_region = MemRegion ((HeapWord*) bitmap.base (), bitmap.size () / HeapWordSize);
247
255
_bitmap_region_special = bitmap.special ();
@@ -258,6 +266,10 @@ jint ShenandoahHeap::initialize() {
258
266
259
267
if (ShenandoahVerify) {
260
268
ReservedSpace verify_bitmap (_bitmap_size, bitmap_page_size);
269
+ os::trace_page_sizes_for_requested_size (" Verify Bitmap" ,
270
+ bitmap_size_orig, bitmap_page_size,
271
+ verify_bitmap.base (),
272
+ verify_bitmap.size (), verify_bitmap.page_size ());
261
273
if (!verify_bitmap.special ()) {
262
274
os::commit_memory_or_exit (verify_bitmap.base (), verify_bitmap.size (), bitmap_page_size, false ,
263
275
" Cannot commit verification bitmap memory" );
@@ -270,6 +282,10 @@ jint ShenandoahHeap::initialize() {
270
282
271
283
// Reserve aux bitmap for use in object_iterate(). We don't commit it here.
272
284
ReservedSpace aux_bitmap (_bitmap_size, bitmap_page_size);
285
+ os::trace_page_sizes_for_requested_size (" Aux Bitmap" ,
286
+ bitmap_size_orig, bitmap_page_size,
287
+ aux_bitmap.base (),
288
+ aux_bitmap.size (), aux_bitmap.page_size ());
273
289
MemTracker::record_virtual_memory_type (aux_bitmap.base (), mtGC);
274
290
_aux_bitmap_region = MemRegion ((HeapWord*) aux_bitmap.base (), aux_bitmap.size () / HeapWordSize);
275
291
_aux_bitmap_region_special = aux_bitmap.special ();
@@ -279,10 +295,15 @@ jint ShenandoahHeap::initialize() {
279
295
// Create regions and region sets
280
296
//
281
297
size_t region_align = align_up (sizeof (ShenandoahHeapRegion), SHENANDOAH_CACHE_LINE_SIZE);
282
- size_t region_storage_size = align_up (region_align * _num_regions, region_page_size);
283
- region_storage_size = align_up (region_storage_size, os::vm_allocation_granularity ());
298
+ size_t region_storage_size_orig = region_align * _num_regions;
299
+ size_t region_storage_size = align_up (region_storage_size_orig,
300
+ MAX2 (region_page_size, os::vm_allocation_granularity ()));
284
301
285
302
ReservedSpace region_storage (region_storage_size, region_page_size);
303
+ os::trace_page_sizes_for_requested_size (" Region Storage" ,
304
+ region_storage_size_orig, region_page_size,
305
+ region_storage.base (),
306
+ region_storage.size (), region_storage.page_size ());
286
307
MemTracker::record_virtual_memory_type (region_storage.base (), mtGC);
287
308
if (!region_storage.special ()) {
288
309
os::commit_memory_or_exit (region_storage.base (), region_storage_size, region_page_size, false ,
@@ -293,16 +314,18 @@ jint ShenandoahHeap::initialize() {
293
314
// Go up until a sensible limit (subject to encoding constraints) and try to reserve the space there.
294
315
// If not successful, bite a bullet and allocate at whatever address.
295
316
{
296
- size_t cset_align = MAX2<size_t >(os::vm_page_size (), os::vm_allocation_granularity ());
297
- size_t cset_size = align_up (((size_t ) sh_rs.base () + sh_rs.size ()) >> ShenandoahHeapRegion::region_size_bytes_shift (), cset_align);
317
+ const size_t cset_align = MAX2<size_t >(os::vm_page_size (), os::vm_allocation_granularity ());
318
+ const size_t cset_size = align_up (((size_t ) sh_rs.base () + sh_rs.size ()) >> ShenandoahHeapRegion::region_size_bytes_shift (), cset_align);
319
+ const size_t cset_page_size = os::vm_page_size ();
298
320
299
321
uintptr_t min = round_up_power_of_2 (cset_align);
300
322
uintptr_t max = (1u << 30u );
323
+ ReservedSpace cset_rs;
301
324
302
325
for (uintptr_t addr = min; addr <= max; addr <<= 1u ) {
303
326
char * req_addr = (char *)addr;
304
327
assert (is_aligned (req_addr, cset_align), " Should be aligned" );
305
- ReservedSpace cset_rs (cset_size, cset_align, os::vm_page_size () , req_addr);
328
+ cset_rs = ReservedSpace (cset_size, cset_align, cset_page_size , req_addr);
306
329
if (cset_rs.is_reserved ()) {
307
330
assert (cset_rs.base () == req_addr, " Allocated where requested: " PTR_FORMAT " , " PTR_FORMAT, p2i (cset_rs.base ()), addr);
308
331
_collection_set = new ShenandoahCollectionSet (this , cset_rs, sh_rs.base ());
@@ -311,9 +334,13 @@ jint ShenandoahHeap::initialize() {
311
334
}
312
335
313
336
if (_collection_set == nullptr ) {
314
- ReservedSpace cset_rs (cset_size, cset_align, os::vm_page_size ());
337
+ cset_rs = ReservedSpace (cset_size, cset_align, os::vm_page_size ());
315
338
_collection_set = new ShenandoahCollectionSet (this , cset_rs, sh_rs.base ());
316
339
}
340
+ os::trace_page_sizes_for_requested_size (" Collection Set" ,
341
+ cset_size, cset_page_size,
342
+ cset_rs.base (),
343
+ cset_rs.size (), cset_rs.page_size ());
317
344
}
318
345
319
346
_regions = NEW_C_HEAP_ARRAY (ShenandoahHeapRegion*, _num_regions, mtGC);
0 commit comments