--- a/hotspot/src/share/vm/memory/allocation.inline.hpp Wed Jun 27 15:23:36 2012 +0200
+++ b/hotspot/src/share/vm/memory/allocation.inline.hpp Thu Jun 28 17:03:16 2012 -0400
@@ -48,33 +48,60 @@
#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, MEMFLAGS flags) {
+ char* p = (char*) os::realloc(old, size, flags, CURRENT_PC);
+ #ifdef ASSERT
+ if (PrintMallocFree) trace_heap_malloc(size, "ReallocateHeap", p);
+ #endif
+ if (p == NULL) vm_exit_out_of_memory(size, "ReallocateHeap");
return p;
}
-inline char* ReallocateHeap(char *old, size_t size, const char* name = NULL) {
- char* p = (char*) os::realloc(old,size);
- #ifdef ASSERT
- if (PrintMallocFree) trace_heap_malloc(size, name, p);
- #else
- Unused_Variable(name);
- #endif
- if (p == NULL) vm_exit_out_of_memory(size, name);
- 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