2432 } |
2432 } |
2433 return NULL; |
2433 return NULL; |
2434 } |
2434 } |
2435 |
2435 |
2436 // The memory is committed |
2436 // The memory is committed |
2437 MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, mtNone, CALLER_PC); |
2437 MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, CALLER_PC); |
2438 |
2438 |
2439 return addr; |
2439 return addr; |
2440 } |
2440 } |
2441 |
2441 |
2442 bool os::release_memory_special(char* base, size_t bytes) { |
2442 bool os::release_memory_special(char* base, size_t bytes) { |
2443 MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); |
2443 if (MemTracker::tracking_level() > NMT_minimal) { |
2444 // detaching the SHM segment will also delete it, see reserve_memory_special() |
2444 Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); |
2445 int rslt = shmdt(base); |
2445 // detaching the SHM segment will also delete it, see reserve_memory_special() |
2446 if (rslt == 0) { |
2446 int rslt = shmdt(base); |
2447 tkr.record((address)base, bytes); |
2447 if (rslt == 0) { |
2448 return true; |
2448 tkr.record((address)base, bytes); |
|
2449 return true; |
|
2450 } else { |
|
2451 return false; |
|
2452 } |
2449 } else { |
2453 } else { |
2450 tkr.discard(); |
2454 return shmdt(base) == 0; |
2451 return false; |
2455 } |
2452 } |
|
2453 |
|
2454 } |
2456 } |
2455 |
2457 |
2456 size_t os::large_page_size() { |
2458 size_t os::large_page_size() { |
2457 return _large_page_size; |
2459 return _large_page_size; |
2458 } |
2460 } |