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