Mercurial > hg > truffle
comparison src/share/vm/runtime/os.cpp @ 11173:6b0fd0964b87
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 31 Jul 2013 11:00:54 +0200 |
parents | 836a62f43af9 5e3b6f79d280 |
children | cefad50507d8 |
comparison
equal
deleted
inserted
replaced
10912:4ea54634f03e | 11173:6b0fd0964b87 |
---|---|
593 | 593 |
594 void* os::malloc(size_t size, MEMFLAGS memflags, address caller) { | 594 void* os::malloc(size_t size, MEMFLAGS memflags, address caller) { |
595 NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); | 595 NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); |
596 NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); | 596 NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); |
597 | 597 |
598 #ifdef ASSERT | |
599 // checking for the WatcherThread and crash_protection first | |
600 // since os::malloc can be called when the libjvm.{dll,so} is | |
601 // first loaded and we don't have a thread yet. | |
602 // try to find the thread after we see that the watcher thread | |
603 // exists and has crash protection. | |
604 WatcherThread *wt = WatcherThread::watcher_thread(); | |
605 if (wt != NULL && wt->has_crash_protection()) { | |
606 Thread* thread = ThreadLocalStorage::get_thread_slow(); | |
607 if (thread == wt) { | |
608 assert(!wt->has_crash_protection(), | |
609 "Can't malloc with crash protection from WatcherThread"); | |
610 } | |
611 } | |
612 #endif | |
613 | |
598 if (size == 0) { | 614 if (size == 0) { |
599 // return a valid pointer if size is zero | 615 // return a valid pointer if size is zero |
600 // if NULL is returned the calling functions assume out of memory. | 616 // if NULL is returned the calling functions assume out of memory. |
601 size = 1; | 617 size = 1; |
602 } | 618 } |
645 | 661 |
646 void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, address caller) { | 662 void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, address caller) { |
647 #ifndef ASSERT | 663 #ifndef ASSERT |
648 NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); | 664 NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); |
649 NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); | 665 NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); |
666 MemTracker::Tracker tkr = MemTracker::get_realloc_tracker(); | |
650 void* ptr = ::realloc(memblock, size); | 667 void* ptr = ::realloc(memblock, size); |
651 if (ptr != NULL) { | 668 if (ptr != NULL) { |
652 MemTracker::record_realloc((address)memblock, (address)ptr, size, memflags, | 669 tkr.record((address)memblock, (address)ptr, size, memflags, |
653 caller == 0 ? CALLER_PC : caller); | 670 caller == 0 ? CALLER_PC : caller); |
671 } else { | |
672 tkr.discard(); | |
654 } | 673 } |
655 return ptr; | 674 return ptr; |
656 #else | 675 #else |
657 if (memblock == NULL) { | 676 if (memblock == NULL) { |
658 return malloc(size, memflags, (caller == 0 ? CALLER_PC : caller)); | 677 return malloc(size, memflags, (caller == 0 ? CALLER_PC : caller)); |
1457 } | 1476 } |
1458 | 1477 |
1459 char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { | 1478 char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { |
1460 char* result = pd_reserve_memory(bytes, addr, alignment_hint); | 1479 char* result = pd_reserve_memory(bytes, addr, alignment_hint); |
1461 if (result != NULL) { | 1480 if (result != NULL) { |
1462 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); | 1481 MemTracker::record_virtual_memory_reserve((address)result, bytes, mtNone, CALLER_PC); |
1463 } | 1482 } |
1464 | 1483 |
1465 return result; | 1484 return result; |
1466 } | 1485 } |
1467 | 1486 |
1468 char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint, | 1487 char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint, |
1469 MEMFLAGS flags) { | 1488 MEMFLAGS flags) { |
1470 char* result = pd_reserve_memory(bytes, addr, alignment_hint); | 1489 char* result = pd_reserve_memory(bytes, addr, alignment_hint); |
1471 if (result != NULL) { | 1490 if (result != NULL) { |
1472 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); | 1491 MemTracker::record_virtual_memory_reserve((address)result, bytes, mtNone, CALLER_PC); |
1473 MemTracker::record_virtual_memory_type((address)result, flags); | 1492 MemTracker::record_virtual_memory_type((address)result, flags); |
1474 } | 1493 } |
1475 | 1494 |
1476 return result; | 1495 return result; |
1477 } | 1496 } |
1478 | 1497 |
1479 char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { | 1498 char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { |
1480 char* result = pd_attempt_reserve_memory_at(bytes, addr); | 1499 char* result = pd_attempt_reserve_memory_at(bytes, addr); |
1481 if (result != NULL) { | 1500 if (result != NULL) { |
1482 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); | 1501 MemTracker::record_virtual_memory_reserve((address)result, bytes, mtNone, CALLER_PC); |
1483 } | 1502 } |
1484 return result; | 1503 return result; |
1485 } | 1504 } |
1486 | 1505 |
1487 void os::split_reserved_memory(char *base, size_t size, | 1506 void os::split_reserved_memory(char *base, size_t size, |
1504 MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); | 1523 MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); |
1505 } | 1524 } |
1506 return res; | 1525 return res; |
1507 } | 1526 } |
1508 | 1527 |
1528 void os::commit_memory_or_exit(char* addr, size_t bytes, bool executable, | |
1529 const char* mesg) { | |
1530 pd_commit_memory_or_exit(addr, bytes, executable, mesg); | |
1531 MemTracker::record_virtual_memory_commit((address)addr, bytes, CALLER_PC); | |
1532 } | |
1533 | |
1534 void os::commit_memory_or_exit(char* addr, size_t size, size_t alignment_hint, | |
1535 bool executable, const char* mesg) { | |
1536 os::pd_commit_memory_or_exit(addr, size, alignment_hint, executable, mesg); | |
1537 MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); | |
1538 } | |
1539 | |
1509 bool os::uncommit_memory(char* addr, size_t bytes) { | 1540 bool os::uncommit_memory(char* addr, size_t bytes) { |
1541 MemTracker::Tracker tkr = MemTracker::get_virtual_memory_uncommit_tracker(); | |
1510 bool res = pd_uncommit_memory(addr, bytes); | 1542 bool res = pd_uncommit_memory(addr, bytes); |
1511 if (res) { | 1543 if (res) { |
1512 MemTracker::record_virtual_memory_uncommit((address)addr, bytes); | 1544 tkr.record((address)addr, bytes); |
1545 } else { | |
1546 tkr.discard(); | |
1513 } | 1547 } |
1514 return res; | 1548 return res; |
1515 } | 1549 } |
1516 | 1550 |
1517 bool os::release_memory(char* addr, size_t bytes) { | 1551 bool os::release_memory(char* addr, size_t bytes) { |
1552 MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); | |
1518 bool res = pd_release_memory(addr, bytes); | 1553 bool res = pd_release_memory(addr, bytes); |
1519 if (res) { | 1554 if (res) { |
1520 MemTracker::record_virtual_memory_release((address)addr, bytes); | 1555 tkr.record((address)addr, bytes); |
1556 } else { | |
1557 tkr.discard(); | |
1521 } | 1558 } |
1522 return res; | 1559 return res; |
1523 } | 1560 } |
1524 | 1561 |
1525 | 1562 |
1526 char* os::map_memory(int fd, const char* file_name, size_t file_offset, | 1563 char* os::map_memory(int fd, const char* file_name, size_t file_offset, |
1527 char *addr, size_t bytes, bool read_only, | 1564 char *addr, size_t bytes, bool read_only, |
1528 bool allow_exec) { | 1565 bool allow_exec) { |
1529 char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec); | 1566 char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec); |
1530 if (result != NULL) { | 1567 if (result != NULL) { |
1531 MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); | 1568 MemTracker::record_virtual_memory_reserve_and_commit((address)result, bytes, mtNone, CALLER_PC); |
1532 MemTracker::record_virtual_memory_commit((address)result, bytes, CALLER_PC); | |
1533 } | 1569 } |
1534 return result; | 1570 return result; |
1535 } | 1571 } |
1536 | 1572 |
1537 char* os::remap_memory(int fd, const char* file_name, size_t file_offset, | 1573 char* os::remap_memory(int fd, const char* file_name, size_t file_offset, |
1540 return pd_remap_memory(fd, file_name, file_offset, addr, bytes, | 1576 return pd_remap_memory(fd, file_name, file_offset, addr, bytes, |
1541 read_only, allow_exec); | 1577 read_only, allow_exec); |
1542 } | 1578 } |
1543 | 1579 |
1544 bool os::unmap_memory(char *addr, size_t bytes) { | 1580 bool os::unmap_memory(char *addr, size_t bytes) { |
1581 MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); | |
1545 bool result = pd_unmap_memory(addr, bytes); | 1582 bool result = pd_unmap_memory(addr, bytes); |
1546 if (result) { | 1583 if (result) { |
1547 MemTracker::record_virtual_memory_uncommit((address)addr, bytes); | 1584 tkr.record((address)addr, bytes); |
1548 MemTracker::record_virtual_memory_release((address)addr, bytes); | 1585 } else { |
1586 tkr.discard(); | |
1549 } | 1587 } |
1550 return result; | 1588 return result; |
1551 } | 1589 } |
1552 | 1590 |
1553 void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { | 1591 void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { |