@@ -290,7 +290,7 @@ size_t ReservedMemoryRegion::committed_size() const {
290
290
291
291
void ReservedMemoryRegion::set_flag (MEMFLAGS f) {
292
292
assert ((flag () == mtNone || flag () == f),
293
- " Overwrite memory type for region [" PTR_FORMAT " -" PTR_FORMAT " ), %u->%u." ,
293
+ " Overwrite memory type for region [" INTPTR_FORMAT " -" INTPTR_FORMAT " ), %u->%u." ,
294
294
p2i (base ()), p2i (end ()), (unsigned )flag (), (unsigned )f);
295
295
if (flag () != f) {
296
296
VirtualMemorySummary::move_reserved_memory (flag (), f, size ());
@@ -343,6 +343,8 @@ bool VirtualMemoryTracker::add_reserved_region(address base_addr, size_t size,
343
343
ReservedMemoryRegion rgn (base_addr, size, stack, flag);
344
344
ReservedMemoryRegion* reserved_rgn = _reserved_regions->find (rgn);
345
345
346
+ log_debug (nmt)(" Add reserved region \' %s\' (" INTPTR_FORMAT " , " SIZE_FORMAT " )" ,
347
+ rgn.flag_name (), p2i (rgn.base ()), rgn.size ());
346
348
if (reserved_rgn == NULL ) {
347
349
VirtualMemorySummary::record_reserved_memory (size, flag);
348
350
return _reserved_regions->add (rgn) != NULL ;
@@ -381,21 +383,25 @@ bool VirtualMemoryTracker::add_reserved_region(address base_addr, size_t size,
381
383
// CDS reserves the whole region for mapping CDS archive, then maps each section into the region.
382
384
// NMT reports CDS as a whole.
383
385
if (reserved_rgn->flag () == mtClassShared) {
386
+ log_debug (nmt)(" CDS reserved region \' %s\' as a whole (" INTPTR_FORMAT " , " SIZE_FORMAT " )" ,
387
+ reserved_rgn->flag_name (), p2i (reserved_rgn->base ()), reserved_rgn->size ());
384
388
assert (reserved_rgn->contain_region (base_addr, size), " Reserved CDS region should contain this mapping region" );
385
389
return true ;
386
390
}
387
391
388
392
// Mapped CDS string region.
389
393
// The string region(s) is part of the java heap.
390
394
if (reserved_rgn->flag () == mtJavaHeap) {
395
+ log_debug (nmt)(" CDS reserved region \' %s\' as a whole (" INTPTR_FORMAT " , " SIZE_FORMAT " )" ,
396
+ reserved_rgn->flag_name (), p2i (reserved_rgn->base ()), reserved_rgn->size ());
391
397
assert (reserved_rgn->contain_region (base_addr, size), " Reserved heap region should contain this mapping region" );
392
398
return true ;
393
399
}
394
400
395
401
// Print some more details. Don't use UL here to avoid circularities.
396
402
#ifdef ASSERT
397
- tty->print_cr (" Error: existing region: [" PTR_FORMAT " -" PTR_FORMAT " ), flag %u.\n "
398
- " new region: [" PTR_FORMAT " -" PTR_FORMAT " ), flag %u." ,
403
+ tty->print_cr (" Error: existing region: [" INTPTR_FORMAT " -" INTPTR_FORMAT " ), flag %u.\n "
404
+ " new region: [" INTPTR_FORMAT " -" INTPTR_FORMAT " ), flag %u." ,
399
405
p2i (reserved_rgn->base ()), p2i (reserved_rgn->end ()), (unsigned )reserved_rgn->flag (),
400
406
p2i (base_addr), p2i (base_addr + size), (unsigned )flag);
401
407
#endif
@@ -430,9 +436,15 @@ bool VirtualMemoryTracker::add_committed_region(address addr, size_t size,
430
436
ReservedMemoryRegion rgn (addr, size);
431
437
ReservedMemoryRegion* reserved_rgn = _reserved_regions->find (rgn);
432
438
433
- assert (reserved_rgn != NULL , " No reserved region" );
439
+ if (reserved_rgn == NULL ) {
440
+ log_debug (nmt)(" Add committed region \' %s\' , No reserved region found for (" INTPTR_FORMAT " , " SIZE_FORMAT " )" ,
441
+ rgn.flag_name (), p2i (rgn.base ()), rgn.size ());
442
+ }
443
+ assert (reserved_rgn != NULL , " Add committed region, No reserved region found" );
434
444
assert (reserved_rgn->contain_region (addr, size), " Not completely contained" );
435
445
bool result = reserved_rgn->add_committed_region (addr, size, stack);
446
+ log_debug (nmt)(" Add committed region \' %s\' (" INTPTR_FORMAT " , " SIZE_FORMAT " ) %s" ,
447
+ rgn.flag_name (), p2i (rgn.base ()), rgn.size (), (result ? " Succeeded" : " Failed" ));
436
448
return result;
437
449
}
438
450
@@ -443,9 +455,12 @@ bool VirtualMemoryTracker::remove_uncommitted_region(address addr, size_t size)
443
455
444
456
ReservedMemoryRegion rgn (addr, size);
445
457
ReservedMemoryRegion* reserved_rgn = _reserved_regions->find (rgn);
446
- assert (reserved_rgn != NULL , " No reserved region" );
458
+ assert (reserved_rgn != NULL , " No reserved region ( " INTPTR_FORMAT " , " SIZE_FORMAT " ) " , p2i (addr), size );
447
459
assert (reserved_rgn->contain_region (addr, size), " Not completely contained" );
460
+ const char * flag_name = reserved_rgn->flag_name (); // after remove, info is not complete
448
461
bool result = reserved_rgn->remove_uncommitted_region (addr, size);
462
+ log_debug (nmt)(" Removed uncommitted region \' %s\' (" INTPTR_FORMAT " , " SIZE_FORMAT " ) %s" ,
463
+ flag_name, p2i (addr), size, (result ? " Succeeded" : " Failed" ));
449
464
return result;
450
465
}
451
466
@@ -454,12 +469,19 @@ bool VirtualMemoryTracker::remove_released_region(ReservedMemoryRegion* rgn) {
454
469
assert (_reserved_regions != NULL , " Sanity check" );
455
470
456
471
// uncommit regions within the released region
457
- if (!rgn->remove_uncommitted_region (rgn->base (), rgn->size ())) {
472
+ ReservedMemoryRegion backup (*rgn);
473
+ bool result = rgn->remove_uncommitted_region (rgn->base (), rgn->size ());
474
+ log_debug (nmt)(" Remove uncommitted region \' %s\' (" INTPTR_FORMAT " , " SIZE_FORMAT " ) %s" ,
475
+ backup.flag_name (), p2i (backup.base ()), backup.size (), (result ? " Succeeded" : " Failed" ));
476
+ if (!result) {
458
477
return false ;
459
478
}
460
479
461
480
VirtualMemorySummary::record_released_memory (rgn->size (), rgn->flag ());
462
- return _reserved_regions->remove (*rgn);
481
+ result = _reserved_regions->remove (*rgn);
482
+ log_debug (nmt)(" Removed region \' %s\' (" INTPTR_FORMAT " , " SIZE_FORMAT " ) from _resvered_regions %s" ,
483
+ backup.flag_name (), p2i (backup.base ()), backup.size (), (result ? " Succeeded" : " Failed" ));
484
+ return result;
463
485
}
464
486
465
487
bool VirtualMemoryTracker::remove_released_region (address addr, size_t size) {
@@ -470,6 +492,10 @@ bool VirtualMemoryTracker::remove_released_region(address addr, size_t size) {
470
492
ReservedMemoryRegion rgn (addr, size);
471
493
ReservedMemoryRegion* reserved_rgn = _reserved_regions->find (rgn);
472
494
495
+ if (reserved_rgn == NULL ) {
496
+ log_debug (nmt)(" No reserved region found for (" INTPTR_FORMAT " , " SIZE_FORMAT " )!" ,
497
+ p2i (rgn.base ()), rgn.size ());
498
+ }
473
499
assert (reserved_rgn != NULL , " No reserved region" );
474
500
if (reserved_rgn->same_region (addr, size)) {
475
501
return remove_released_region (reserved_rgn);
@@ -527,8 +553,10 @@ bool VirtualMemoryTracker::split_reserved_region(address addr, size_t size, size
527
553
NativeCallStack original_stack = *reserved_rgn->call_stack ();
528
554
MEMFLAGS original_flags = reserved_rgn->flag ();
529
555
556
+ const char * name = reserved_rgn->flag_name ();
530
557
remove_released_region (reserved_rgn);
531
-
558
+ log_debug (nmt)(" Split region \' %s\' (" INTPTR_FORMAT " , " SIZE_FORMAT " ) with size " SIZE_FORMAT,
559
+ name, p2i (rgn.base ()), rgn.size (), split);
532
560
// Now, create two new regions.
533
561
add_reserved_region (addr, split, original_stack, original_flags);
534
562
add_reserved_region (addr + split, size - split, original_stack, original_flags);
0 commit comments