src/share/vm/services/virtualMemoryTracker.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/services

src/share/vm/services/virtualMemoryTracker.cpp

Print this page




 320       reserved_rgn->set_call_stack(stack);
 321       return true;
 322     } else {
 323       // Overlapped reservation.
 324       // It can happen when the regions are thread stacks, as JNI
 325       // thread does not detach from VM before exits, and leads to
 326       // leak JavaThread object
 327       if (reserved_rgn->flag() == mtThreadStack) {
 328         guarantee(!CheckJNICalls, "Attached JNI thread exited without being detached");
 329         // Overwrite with new region
 330 
 331         // Release old region
 332         VirtualMemorySummary::record_uncommitted_memory(reserved_rgn->committed_size(), reserved_rgn->flag());
 333         VirtualMemorySummary::record_released_memory(reserved_rgn->size(), reserved_rgn->flag());
 334 
 335         // Add new region
 336         VirtualMemorySummary::record_reserved_memory(rgn.size(), flag);
 337 
 338         *reserved_rgn = rgn;
 339         return true;
 340       } else {









 341         ShouldNotReachHere();
 342         return false;
 343       }
 344     }
 345   }
 346 }
 347 
 348 void VirtualMemoryTracker::set_reserved_region_type(address addr, MEMFLAGS flag) {
 349   assert(addr != NULL, "Invalid address");
 350   assert(_reserved_regions != NULL, "Sanity check");
 351 
 352   ReservedMemoryRegion   rgn(addr, 1);
 353   ReservedMemoryRegion*  reserved_rgn = _reserved_regions->find(rgn);
 354   if (reserved_rgn != NULL) {
 355     assert(reserved_rgn->contain_address(addr), "Containment");
 356     if (reserved_rgn->flag() != flag) {
 357       assert(reserved_rgn->flag() == mtNone, "Overwrite memory type");
 358       reserved_rgn->set_flag(flag);
 359     }
 360   }
 361 }
 362 
 363 bool VirtualMemoryTracker::add_committed_region(address addr, size_t size,
 364   const NativeCallStack& stack) {
 365   assert(addr != NULL, "Invalid address");




 320       reserved_rgn->set_call_stack(stack);
 321       return true;
 322     } else {
 323       // Overlapped reservation.
 324       // It can happen when the regions are thread stacks, as JNI
 325       // thread does not detach from VM before exits, and leads to
 326       // leak JavaThread object
 327       if (reserved_rgn->flag() == mtThreadStack) {
 328         guarantee(!CheckJNICalls, "Attached JNI thread exited without being detached");
 329         // Overwrite with new region
 330 
 331         // Release old region
 332         VirtualMemorySummary::record_uncommitted_memory(reserved_rgn->committed_size(), reserved_rgn->flag());
 333         VirtualMemorySummary::record_released_memory(reserved_rgn->size(), reserved_rgn->flag());
 334 
 335         // Add new region
 336         VirtualMemorySummary::record_reserved_memory(rgn.size(), flag);
 337 
 338         *reserved_rgn = rgn;
 339         return true;
 340       } 
 341       
 342       // CDS mapping region.
 343       // CDS reserves the whole region for mapping CDS archive, then maps each section into the region.
 344       // NMT reports CDS as a whole.
 345       if (reserved_rgn->flag() == mtClassShared) {
 346         assert(reserved_rgn->contain_region(base_addr, size), "Reserved CDS region should contain this mapping region");
 347         return true;
 348       } 
 349 
 350       ShouldNotReachHere();
 351       return false;
 352     }
 353   }

 354 }
 355 
 356 void VirtualMemoryTracker::set_reserved_region_type(address addr, MEMFLAGS flag) {
 357   assert(addr != NULL, "Invalid address");
 358   assert(_reserved_regions != NULL, "Sanity check");
 359 
 360   ReservedMemoryRegion   rgn(addr, 1);
 361   ReservedMemoryRegion*  reserved_rgn = _reserved_regions->find(rgn);
 362   if (reserved_rgn != NULL) {
 363     assert(reserved_rgn->contain_address(addr), "Containment");
 364     if (reserved_rgn->flag() != flag) {
 365       assert(reserved_rgn->flag() == mtNone, "Overwrite memory type");
 366       reserved_rgn->set_flag(flag);
 367     }
 368   }
 369 }
 370 
 371 bool VirtualMemoryTracker::add_committed_region(address addr, size_t size,
 372   const NativeCallStack& stack) {
 373   assert(addr != NULL, "Invalid address");


src/share/vm/services/virtualMemoryTracker.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File