< prev index next >
src/hotspot/share/memory/allocation.hpp
Print this page
@@ -35,25 +35,26 @@
public:
enum AllocFailEnum { EXIT_OOM, RETURN_NULL };
};
typedef AllocFailStrategy::AllocFailEnum AllocFailType;
-// All classes in the virtual machine must be subclassed
-// by one of the following allocation classes:
+// For convenience and documentation of intended use, classes in the virtual machine
+// may be subclassed by one of the following allocation classes. These provide default
+// operator new and delete functions. If not subclassed with the following,
+// the global operator new may not be used and will give a fatal error at runtime.
+// Note: std::malloc and std::free should never called directly.
+
//
// For objects allocated in the resource area (see resourceArea.hpp).
// - ResourceObj
//
-// For objects allocated in the C-heap (managed by: free & malloc).
+// For objects allocated in the C-heap (managed by: free & malloc and tracked with NMT)
// - CHeapObj
//
// For objects allocated on the stack.
// - StackObj
//
-// For embedded objects.
-// - ValueObj
-//
// For classes used as name spaces.
// - AllStatic
//
// For classes in Metaspace (class data)
// - MetaspaceObj
@@ -82,19 +83,15 @@
// FREE_C_HEAP_ARRAY(type, old)
// FREE_C_HEAP_OBJ(objname, type, memflags)
// char* AllocateHeap(size_t size, const char* name);
// void FreeHeap(void* p);
//
-// C-heap allocation can be traced using +PrintHeapAllocation.
-// malloc and free should therefore never called directly.
-
-// Base class for objects allocated in the C-heap.
// In non product mode we introduce a super class for all allocation classes
// that supports printing.
// We avoid the superclass in product mode since some C++ compilers add
-// a word overhead for empty super classes.
+// a word overhead for empty super classes, also this has a vptr for print functions.
#ifdef PRODUCT
#define ALLOCATION_SUPER_CLASS_SPEC
#else
#define ALLOCATION_SUPER_CLASS_SPEC : public AllocatedObj
@@ -186,35 +183,10 @@
#endif
void operator delete(void* p);
void operator delete [](void* p);
};
-// Base class for objects used as value objects.
-// Calling new or delete will result in fatal error.
-//
-// Portability note: Certain compilers (e.g. gcc) will
-// always make classes bigger if it has a superclass, even
-// if the superclass does not have any virtual methods or
-// instance fields. The HotSpot implementation relies on this
-// not to happen. So never make a ValueObj class a direct subclass
-// like this:
-//
-// class A {
-// ...
-// }
-//
-// be defined as a an empty string "".
-//
-class _ValueObj {
- private:
- void* operator new(size_t size) throw();
- void operator delete(void* p);
- void* operator new [](size_t size) throw();
- void operator delete [](void* p);
-};
-
-
// Base class for objects stored in Metaspace.
// Calling delete will result in fatal error.
//
// Do not inherit from something with a vptr because this class does
// not introduce one. This class is used to allocate both shared read-only
< prev index next >