comparison src/os/linux/vm/os_linux.cpp @ 8711:6b803ba47588

8008257: NMT: assert(new_rec->is_allocation_record()) failed when running with shared memory option Summary: Corrected virtual memory recording and tagging code when large pages are used Reviewed-by: coleenp, ccheung
author zgu
date Thu, 07 Mar 2013 14:06:44 -0500
parents 9058789475af
children 14509df4cd63 754c24457b20
comparison
equal deleted inserted replaced
8710:9058789475af 8711:6b803ba47588
56 #include "runtime/stubRoutines.hpp" 56 #include "runtime/stubRoutines.hpp"
57 #include "runtime/thread.inline.hpp" 57 #include "runtime/thread.inline.hpp"
58 #include "runtime/threadCritical.hpp" 58 #include "runtime/threadCritical.hpp"
59 #include "runtime/timer.hpp" 59 #include "runtime/timer.hpp"
60 #include "services/attachListener.hpp" 60 #include "services/attachListener.hpp"
61 #include "services/memTracker.hpp"
61 #include "services/runtimeService.hpp" 62 #include "services/runtimeService.hpp"
62 #include "utilities/decoder.hpp" 63 #include "utilities/decoder.hpp"
63 #include "utilities/defaultStream.hpp" 64 #include "utilities/defaultStream.hpp"
64 #include "utilities/events.hpp" 65 #include "utilities/events.hpp"
65 #include "utilities/elfFile.hpp" 66 #include "utilities/elfFile.hpp"
3210 3211
3211 if ((addr != NULL) && UseNUMAInterleaving) { 3212 if ((addr != NULL) && UseNUMAInterleaving) {
3212 numa_make_global(addr, bytes); 3213 numa_make_global(addr, bytes);
3213 } 3214 }
3214 3215
3216 // The memory is committed
3217 address pc = CALLER_PC;
3218 MemTracker::record_virtual_memory_reserve((address)addr, bytes, pc);
3219 MemTracker::record_virtual_memory_commit((address)addr, bytes, pc);
3220
3215 return addr; 3221 return addr;
3216 } 3222 }
3217 3223
3218 bool os::release_memory_special(char* base, size_t bytes) { 3224 bool os::release_memory_special(char* base, size_t bytes) {
3219 // detaching the SHM segment will also delete it, see reserve_memory_special() 3225 // detaching the SHM segment will also delete it, see reserve_memory_special()
3220 int rslt = shmdt(base); 3226 int rslt = shmdt(base);
3221 return rslt == 0; 3227 if (rslt == 0) {
3228 MemTracker::record_virtual_memory_uncommit((address)base, bytes);
3229 MemTracker::record_virtual_memory_release((address)base, bytes);
3230 return true;
3231 } else {
3232 return false;
3233 }
3222 } 3234 }
3223 3235
3224 size_t os::large_page_size() { 3236 size_t os::large_page_size() {
3225 return _large_page_size; 3237 return _large_page_size;
3226 } 3238 }