372 VirtualMemorySummary::record_uncommitted_memory(reserved_rgn->committed_size(), reserved_rgn->flag());
373 VirtualMemorySummary::record_released_memory(reserved_rgn->size(), reserved_rgn->flag());
374
375 // Add new region
376 VirtualMemorySummary::record_reserved_memory(rgn.size(), flag);
377
378 *reserved_rgn = rgn;
379 return true;
380 }
381
382 // CDS mapping region.
383 // CDS reserves the whole region for mapping CDS archive, then maps each section into the region.
384 // NMT reports CDS as a whole.
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());
388 assert(reserved_rgn->contain_region(base_addr, size), "Reserved CDS region should contain this mapping region");
389 return true;
390 }
391
392 // Mapped CDS string region.
393 // The string region(s) is part of the java heap.
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());
397 assert(reserved_rgn->contain_region(base_addr, size), "Reserved heap region should contain this mapping region");
398 return true;
399 }
400
401 // Print some more details. Don't use UL here to avoid circularities.
402 tty->print_cr("Error: existing region: [" INTPTR_FORMAT "-" INTPTR_FORMAT "), flag %u.\n"
403 " new region: [" INTPTR_FORMAT "-" INTPTR_FORMAT "), flag %u.",
404 p2i(reserved_rgn->base()), p2i(reserved_rgn->end()), (unsigned)reserved_rgn->flag(),
405 p2i(base_addr), p2i(base_addr + size), (unsigned)flag);
406 if (MemTracker::tracking_level() == NMT_detail) {
407 tty->print_cr("Existing region allocated from:");
408 reserved_rgn->call_stack()->print_on(tty);
409 tty->print_cr("New region allocated from:");
410 stack.print_on(tty);
411 }
412 ShouldNotReachHere();
413 return false;
414 }
415 }
416 }
417
418 void VirtualMemoryTracker::set_reserved_region_type(address addr, MEMFLAGS flag) {
419 assert(addr != nullptr, "Invalid address");
420 assert(_reserved_regions != nullptr, "Sanity check");
|
372 VirtualMemorySummary::record_uncommitted_memory(reserved_rgn->committed_size(), reserved_rgn->flag());
373 VirtualMemorySummary::record_released_memory(reserved_rgn->size(), reserved_rgn->flag());
374
375 // Add new region
376 VirtualMemorySummary::record_reserved_memory(rgn.size(), flag);
377
378 *reserved_rgn = rgn;
379 return true;
380 }
381
382 // CDS mapping region.
383 // CDS reserves the whole region for mapping CDS archive, then maps each section into the region.
384 // NMT reports CDS as a whole.
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());
388 assert(reserved_rgn->contain_region(base_addr, size), "Reserved CDS region should contain this mapping region");
389 return true;
390 }
391
392 // Mapped CDS heap region.
393 if (reserved_rgn->flag() == mtJavaHeap) {
394 log_debug(nmt)("CDS reserved region \'%s\' as a whole (" INTPTR_FORMAT ", " SIZE_FORMAT ")",
395 reserved_rgn->flag_name(), p2i(reserved_rgn->base()), reserved_rgn->size());
396 assert(reserved_rgn->contain_region(base_addr, size), "Reserved heap region should contain this mapping region");
397 return true;
398 }
399
400 if (reserved_rgn->flag() == mtCode) {
401 assert(reserved_rgn->contain_region(base_addr, size), "Reserved code region should contain this mapping region");
402 return true;
403 }
404
405 // Print some more details. Don't use UL here to avoid circularities.
406 tty->print_cr("Error: existing region: [" INTPTR_FORMAT "-" INTPTR_FORMAT "), flag %u.\n"
407 " new region: [" INTPTR_FORMAT "-" INTPTR_FORMAT "), flag %u.",
408 p2i(reserved_rgn->base()), p2i(reserved_rgn->end()), (unsigned)reserved_rgn->flag(),
409 p2i(base_addr), p2i(base_addr + size), (unsigned)flag);
410 if (MemTracker::tracking_level() == NMT_detail) {
411 tty->print_cr("Existing region allocated from:");
412 reserved_rgn->call_stack()->print_on(tty);
413 tty->print_cr("New region allocated from:");
414 stack.print_on(tty);
415 }
416 ShouldNotReachHere();
417 return false;
418 }
419 }
420 }
421
422 void VirtualMemoryTracker::set_reserved_region_type(address addr, MEMFLAGS flag) {
423 assert(addr != nullptr, "Invalid address");
424 assert(_reserved_regions != nullptr, "Sanity check");
|