8233494: Avoid calling MallocTracker::record_malloc and record_free when NMT is off

Reviewed-by: mdoerr, zgu
This commit is contained in:
Claes Redestad 2019-11-05 09:57:10 +01:00
parent 9f62f4586d
commit af729c390c
4 changed files with 15 additions and 16 deletions

View file

@ -755,8 +755,8 @@ void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, const NativeCa
NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1));
NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size));
// NMT support // NMT support
void* membase = MemTracker::record_free(memblock);
NMT_TrackingLevel level = MemTracker::tracking_level(); NMT_TrackingLevel level = MemTracker::tracking_level();
void* membase = MemTracker::record_free(memblock, level);
size_t nmt_header_size = MemTracker::malloc_header_size(level); size_t nmt_header_size = MemTracker::malloc_header_size(level);
void* ptr = ::realloc(membase, size + nmt_header_size); void* ptr = ::realloc(membase, size + nmt_header_size);
return MemTracker::record_malloc(ptr, size, memflags, stack, level); return MemTracker::record_malloc(ptr, size, memflags, stack, level);
@ -797,7 +797,7 @@ void os::free(void *memblock) {
log_warning(malloc, free)("os::free caught " PTR_FORMAT, p2i(memblock)); log_warning(malloc, free)("os::free caught " PTR_FORMAT, p2i(memblock));
breakpoint(); breakpoint();
} }
void* membase = MemTracker::record_free(memblock); void* membase = MemTracker::record_free(memblock, MemTracker::tracking_level());
verify_memory(membase); verify_memory(membase);
GuardedMemory guarded(membase); GuardedMemory guarded(membase);
@ -806,7 +806,7 @@ void os::free(void *memblock) {
membase = guarded.release_for_freeing(); membase = guarded.release_for_freeing();
::free(membase); ::free(membase);
#else #else
void* membase = MemTracker::record_free(memblock); void* membase = MemTracker::record_free(memblock, MemTracker::tracking_level());
::free(membase); ::free(membase);
#endif #endif
} }

View file

@ -119,6 +119,7 @@ bool MallocTracker::transition(NMT_TrackingLevel from, NMT_TrackingLevel to) {
// Record a malloc memory allocation // Record a malloc memory allocation
void* MallocTracker::record_malloc(void* malloc_base, size_t size, MEMFLAGS flags, void* MallocTracker::record_malloc(void* malloc_base, size_t size, MEMFLAGS flags,
const NativeCallStack& stack, NMT_TrackingLevel level) { const NativeCallStack& stack, NMT_TrackingLevel level) {
assert(level != NMT_off, "precondition");
void* memblock; // the address for user data void* memblock; // the address for user data
MallocHeader* header = NULL; MallocHeader* header = NULL;
@ -128,10 +129,6 @@ void* MallocTracker::record_malloc(void* malloc_base, size_t size, MEMFLAGS flag
// Uses placement global new operator to initialize malloc header // Uses placement global new operator to initialize malloc header
if (level == NMT_off) {
return malloc_base;
}
header = ::new (malloc_base)MallocHeader(size, flags, stack, level); header = ::new (malloc_base)MallocHeader(size, flags, stack, level);
memblock = (void*)((char*)malloc_base + sizeof(MallocHeader)); memblock = (void*)((char*)malloc_base + sizeof(MallocHeader));
@ -151,14 +148,9 @@ void* MallocTracker::record_malloc(void* malloc_base, size_t size, MEMFLAGS flag
} }
void* MallocTracker::record_free(void* memblock) { void* MallocTracker::record_free(void* memblock) {
// Never turned on assert(MemTracker::tracking_level() != NMT_off && memblock != NULL, "precondition");
if (MemTracker::tracking_level() == NMT_off ||
memblock == NULL) {
return memblock;
}
MallocHeader* header = malloc_header(memblock); MallocHeader* header = malloc_header(memblock);
header->release(); header->release();
return (void*)header; return (void*)header;
} }

View file

@ -157,8 +157,11 @@ class MemTracker : AllStatic {
static inline void* record_malloc(void* mem_base, size_t size, MEMFLAGS flag, static inline void* record_malloc(void* mem_base, size_t size, MEMFLAGS flag,
const NativeCallStack& stack, NMT_TrackingLevel level) { const NativeCallStack& stack, NMT_TrackingLevel level) {
if (level != NMT_off) {
return MallocTracker::record_malloc(mem_base, size, flag, stack, level); return MallocTracker::record_malloc(mem_base, size, flag, stack, level);
} }
return mem_base;
}
static inline size_t malloc_header_size(NMT_TrackingLevel level) { static inline size_t malloc_header_size(NMT_TrackingLevel level) {
return MallocTracker::malloc_header_size(level); return MallocTracker::malloc_header_size(level);
@ -177,7 +180,11 @@ class MemTracker : AllStatic {
static void* malloc_base(void* memblock); static void* malloc_base(void* memblock);
// Record malloc free and return malloc base address // Record malloc free and return malloc base address
static inline void* record_free(void* memblock) { static inline void* record_free(void* memblock, NMT_TrackingLevel level) {
// Never turned on
if (level == NMT_off || memblock == NULL) {
return memblock;
}
return MallocTracker::record_free(memblock); return MallocTracker::record_free(memblock);
} }