1.1 --- a/src/os/linux/vm/os_linux.cpp Wed Aug 27 09:36:55 2014 +0200 1.2 +++ b/src/os/linux/vm/os_linux.cpp Wed Aug 27 08:19:12 2014 -0400 1.3 @@ -3501,9 +3501,12 @@ 1.4 1.5 assert(is_ptr_aligned(start, alignment), "Must be"); 1.6 1.7 - // os::reserve_memory_special will record this memory area. 1.8 - // Need to release it here to prevent overlapping reservations. 1.9 - MemTracker::record_virtual_memory_release((address)start, bytes); 1.10 + if (MemTracker::tracking_level() > NMT_minimal) { 1.11 + // os::reserve_memory_special will record this memory area. 1.12 + // Need to release it here to prevent overlapping reservations. 1.13 + Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); 1.14 + tkr.record((address)start, bytes); 1.15 + } 1.16 1.17 char* end = start + bytes; 1.18 1.19 @@ -3598,7 +3601,7 @@ 1.20 } 1.21 1.22 // The memory is committed 1.23 - MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, mtNone, CALLER_PC); 1.24 + MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, CALLER_PC); 1.25 } 1.26 1.27 return addr; 1.28 @@ -3614,24 +3617,30 @@ 1.29 } 1.30 1.31 bool os::release_memory_special(char* base, size_t bytes) { 1.32 + bool res; 1.33 + if (MemTracker::tracking_level() > NMT_minimal) { 1.34 + Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); 1.35 + res = os::Linux::release_memory_special_impl(base, bytes); 1.36 + if (res) { 1.37 + tkr.record((address)base, bytes); 1.38 + } 1.39 + 1.40 + } else { 1.41 + res = os::Linux::release_memory_special_impl(base, bytes); 1.42 + } 1.43 + return res; 1.44 +} 1.45 + 1.46 +bool os::Linux::release_memory_special_impl(char* base, size_t bytes) { 1.47 assert(UseLargePages, "only for large pages"); 1.48 - 1.49 - MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); 1.50 - 1.51 bool res; 1.52 + 1.53 if (UseSHM) { 1.54 res = os::Linux::release_memory_special_shm(base, bytes); 1.55 } else { 1.56 assert(UseHugeTLBFS, "must be"); 1.57 res = os::Linux::release_memory_special_huge_tlbfs(base, bytes); 1.58 } 1.59 - 1.60 - if (res) { 1.61 - tkr.record((address)base, bytes); 1.62 - } else { 1.63 - tkr.discard(); 1.64 - } 1.65 - 1.66 return res; 1.67 } 1.68