6995781: Native Memory Tracking (Phase 1)

7151532: DCmd for hotspot native memory tracking

Implementation of native memory tracking phase 1, which tracks VM native memory usage, and related DCmd

Reviewed-by: acorn, coleenp, fparain
This commit is contained in:
Zhengyu Gu 2012-06-28 17:03:16 -04:00
parent 8e42425c92
commit a39b17624a
315 changed files with 7245 additions and 1477 deletions

View file

@ -48,33 +48,60 @@ inline void inc_stat_counter(volatile julong* dest, julong add_value) {
#endif
// allocate using malloc; will fail if no memory available
inline char* AllocateHeap(size_t size, const char* name = NULL) {
char* p = (char*) os::malloc(size);
inline char* AllocateHeap(size_t size, MEMFLAGS flags, address pc = 0) {
if (pc == 0) {
pc = CURRENT_PC;
}
char* p = (char*) os::malloc(size, flags, pc);
#ifdef ASSERT
if (PrintMallocFree) trace_heap_malloc(size, name, p);
#else
Unused_Variable(name);
if (PrintMallocFree) trace_heap_malloc(size, "AllocateHeap", p);
#endif
if (p == NULL) vm_exit_out_of_memory(size, name);
if (p == NULL) vm_exit_out_of_memory(size, "AllocateHeap");
return p;
}
inline char* ReallocateHeap(char *old, size_t size, const char* name = NULL) {
char* p = (char*) os::realloc(old,size);
inline char* ReallocateHeap(char *old, size_t size, MEMFLAGS flags) {
char* p = (char*) os::realloc(old, size, flags, CURRENT_PC);
#ifdef ASSERT
if (PrintMallocFree) trace_heap_malloc(size, name, p);
#else
Unused_Variable(name);
if (PrintMallocFree) trace_heap_malloc(size, "ReallocateHeap", p);
#endif
if (p == NULL) vm_exit_out_of_memory(size, name);
if (p == NULL) vm_exit_out_of_memory(size, "ReallocateHeap");
return p;
}
inline void FreeHeap(void* p) {
inline void FreeHeap(void* p, MEMFLAGS memflags = mtInternal) {
#ifdef ASSERT
if (PrintMallocFree) trace_heap_free(p);
#endif
os::free(p);
os::free(p, memflags);
}
template <MEMFLAGS F> void* CHeapObj<F>::operator new(size_t size,
address caller_pc){
#ifdef ASSERT
void* p = (void*)AllocateHeap(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC));
if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p);
return p;
#else
return (void *) AllocateHeap(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC));
#endif
}
template <MEMFLAGS F> void* CHeapObj<F>::operator new (size_t size,
const std::nothrow_t& nothrow_constant, address caller_pc) {
#ifdef ASSERT
void* p = os::malloc(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC));
if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p);
return p;
#else
return os::malloc(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC));
#endif
}
template <MEMFLAGS F> void CHeapObj<F>::operator delete(void* p){
FreeHeap(p, F);
}
#endif // SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP