< 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 >