comparison src/share/vm/runtime/os.cpp @ 6882:716c64bda5ba

7199092: NMT: NMT needs to deal overlapped virtual memory ranges Summary: Enhanced virtual memory tracking to track committed regions as well as reserved regions, so NMT now can generate virtual memory map. Reviewed-by: acorn, coleenp
author zgu
date Fri, 19 Oct 2012 21:40:07 -0400
parents 87ac5c0a404d
children e522a00b91aa 6cb0d32b828b e4f764ddb06a
comparison
equal deleted inserted replaced
6879:8ebcedb7604d 6882:716c64bda5ba
598 } 598 }
599 debug_only(if (paranoid) verify_block(memblock)); 599 debug_only(if (paranoid) verify_block(memblock));
600 if (PrintMalloc && tty != NULL) tty->print_cr("os::malloc " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, memblock); 600 if (PrintMalloc && tty != NULL) tty->print_cr("os::malloc " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, memblock);
601 601
602 // we do not track MallocCushion memory 602 // we do not track MallocCushion memory
603 if (MemTracker::is_on()) {
604 MemTracker::record_malloc((address)memblock, size, memflags, caller == 0 ? CALLER_PC : caller); 603 MemTracker::record_malloc((address)memblock, size, memflags, caller == 0 ? CALLER_PC : caller);
605 }
606 604
607 return memblock; 605 return memblock;
608 } 606 }
609 607
610 608
611 void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, address caller) { 609 void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, address caller) {
612 #ifndef ASSERT 610 #ifndef ASSERT
613 NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); 611 NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1));
614 NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); 612 NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size));
615 void* ptr = ::realloc(memblock, size); 613 void* ptr = ::realloc(memblock, size);
616 if (ptr != NULL && MemTracker::is_on()) { 614 if (ptr != NULL) {
617 MemTracker::record_realloc((address)memblock, (address)ptr, size, memflags, 615 MemTracker::record_realloc((address)memblock, (address)ptr, size, memflags,
618 caller == 0 ? CALLER_PC : caller); 616 caller == 0 ? CALLER_PC : caller);
619 } 617 }
620 return ptr; 618 return ptr;
621 #else 619 #else
1399 } 1397 }
1400 1398
1401 1399
1402 char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { 1400 char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) {
1403 char* result = pd_reserve_memory(bytes, addr, alignment_hint); 1401 char* result = pd_reserve_memory(bytes, addr, alignment_hint);
1404 if (result != NULL && MemTracker::is_on()) { 1402 if (result != NULL) {
1405 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); 1403 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC);
1406 } 1404 }
1407 1405
1408 return result; 1406 return result;
1409 } 1407 }
1410 char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { 1408 char* os::attempt_reserve_memory_at(size_t bytes, char* addr) {
1411 char* result = pd_attempt_reserve_memory_at(bytes, addr); 1409 char* result = pd_attempt_reserve_memory_at(bytes, addr);
1412 if (result != NULL && MemTracker::is_on()) { 1410 if (result != NULL) {
1413 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); 1411 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC);
1414 } 1412 }
1415 return result; 1413 return result;
1416 } 1414 }
1417 1415
1420 pd_split_reserved_memory(base, size, split, realloc); 1418 pd_split_reserved_memory(base, size, split, realloc);
1421 } 1419 }
1422 1420
1423 bool os::commit_memory(char* addr, size_t bytes, bool executable) { 1421 bool os::commit_memory(char* addr, size_t bytes, bool executable) {
1424 bool res = pd_commit_memory(addr, bytes, executable); 1422 bool res = pd_commit_memory(addr, bytes, executable);
1425 if (res && MemTracker::is_on()) { 1423 if (res) {
1426 MemTracker::record_virtual_memory_commit((address)addr, bytes, CALLER_PC); 1424 MemTracker::record_virtual_memory_commit((address)addr, bytes, CALLER_PC);
1427 } 1425 }
1428 return res; 1426 return res;
1429 } 1427 }
1430 1428
1431 bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, 1429 bool os::commit_memory(char* addr, size_t size, size_t alignment_hint,
1432 bool executable) { 1430 bool executable) {
1433 bool res = os::pd_commit_memory(addr, size, alignment_hint, executable); 1431 bool res = os::pd_commit_memory(addr, size, alignment_hint, executable);
1434 if (res && MemTracker::is_on()) { 1432 if (res) {
1435 MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); 1433 MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC);
1436 } 1434 }
1437 return res; 1435 return res;
1438 } 1436 }
1439 1437
1456 1454
1457 char* os::map_memory(int fd, const char* file_name, size_t file_offset, 1455 char* os::map_memory(int fd, const char* file_name, size_t file_offset,
1458 char *addr, size_t bytes, bool read_only, 1456 char *addr, size_t bytes, bool read_only,
1459 bool allow_exec) { 1457 bool allow_exec) {
1460 char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec); 1458 char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec);
1461 if (result != NULL && MemTracker::is_on()) { 1459 if (result != NULL) {
1462 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); 1460 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC);
1461 MemTracker::record_virtual_memory_commit((address)result, bytes, CALLER_PC);
1463 } 1462 }
1464 return result; 1463 return result;
1465 } 1464 }
1466 1465
1467 char* os::remap_memory(int fd, const char* file_name, size_t file_offset, 1466 char* os::remap_memory(int fd, const char* file_name, size_t file_offset,
1472 } 1471 }
1473 1472
1474 bool os::unmap_memory(char *addr, size_t bytes) { 1473 bool os::unmap_memory(char *addr, size_t bytes) {
1475 bool result = pd_unmap_memory(addr, bytes); 1474 bool result = pd_unmap_memory(addr, bytes);
1476 if (result) { 1475 if (result) {
1476 MemTracker::record_virtual_memory_uncommit((address)addr, bytes);
1477 MemTracker::record_virtual_memory_release((address)addr, bytes); 1477 MemTracker::record_virtual_memory_release((address)addr, bytes);
1478 } 1478 }
1479 return result; 1479 return result;
1480 } 1480 }
1481 1481