diff src/share/vm/memory/allocation.hpp @ 10136:cc12becb22e7

Merge
author dcubed
date Sun, 21 Apr 2013 21:05:02 -0700
parents 5b6512efcdc4 5a9fa2ba85f0
children f258c5828eb8 4b52137b07c9
line wrap: on
line diff
--- a/src/share/vm/memory/allocation.hpp	Sat Apr 20 19:02:11 2013 +0200
+++ b/src/share/vm/memory/allocation.hpp	Sun Apr 21 21:05:02 2013 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -86,24 +86,12 @@
 // subclasses.
 //
 // The following macros and function should be used to allocate memory
-// directly in the resource area or in the C-heap, The _OBJECT variants
-// of the NEW_C_HEAP macros are used when a constructor and destructor
-// must be invoked for the object(s) and the objects are not inherited
-// from CHeapObj. The preferable way to allocate objects is using the
-// new operator.
-//
-// WARNING: The array variant must only be used for a homogenous array
-// where all objects are of the exact type specified. If subtypes are
-// stored in the array then the incorrect destructor might be called.
+// directly in the resource area or in the C-heap:
 //
 //   NEW_RESOURCE_ARRAY(type,size)
 //   NEW_RESOURCE_OBJ(type)
 //   NEW_C_HEAP_ARRAY(type,size)
 //   NEW_C_HEAP_OBJ(type)
-//   NEW_C_HEAP_OBJECT(type, memflags, pc, allocfail)
-//   NEW_C_HEAP_OBJECT_ARRAY(type, size, memflags, pc, allocfail)
-//   FREE_C_HEAP_OBJECT(type, objname, memflags)
-//   FREE_C_HEAP_OBJECT_ARRAY(type, size, arrayname, memflags)
 //   char* AllocateHeap(size_t size, const char* name);
 //   void  FreeHeap(void* p);
 //
@@ -207,11 +195,8 @@
   _NOINLINE_ void* operator new(size_t size, address caller_pc = 0);
   _NOINLINE_ void* operator new (size_t size, const std::nothrow_t&  nothrow_constant,
                                address caller_pc = 0);
-  _NOINLINE_ void* operator new [](size_t size, address caller_pc = 0);
-  _NOINLINE_ void* operator new [](size_t size, const std::nothrow_t&  nothrow_constant,
-                               address caller_pc = 0);
+
   void  operator delete(void* p);
-  void  operator delete [] (void* p);
 };
 
 // Base class for objects allocated on the stack only.
@@ -221,8 +206,6 @@
  private:
   void* operator new(size_t size);
   void  operator delete(void* p);
-  void* operator new [](size_t size);
-  void  operator delete [](void* p);
 };
 
 // Base class for objects used as value objects.
@@ -246,9 +229,7 @@
 class _ValueObj {
  private:
   void* operator new(size_t size);
-  void  operator delete(void* p);
-  void* operator new [](size_t size);
-  void  operator delete [](void* p);
+  void operator delete(void* p);
 };
 
 
@@ -529,24 +510,13 @@
 
  public:
   void* operator new(size_t size, allocation_type type, MEMFLAGS flags);
-  void* operator new [](size_t size, allocation_type type, MEMFLAGS flags);
   void* operator new(size_t size, const std::nothrow_t&  nothrow_constant,
       allocation_type type, MEMFLAGS flags);
-  void* operator new [](size_t size, const std::nothrow_t&  nothrow_constant,
-      allocation_type type, MEMFLAGS flags);
-
   void* operator new(size_t size, Arena *arena) {
       address res = (address)arena->Amalloc(size);
       DEBUG_ONLY(set_allocation_type(res, ARENA);)
       return res;
   }
-
-  void* operator new [](size_t size, Arena *arena) {
-      address res = (address)arena->Amalloc(size);
-      DEBUG_ONLY(set_allocation_type(res, ARENA);)
-      return res;
-  }
-
   void* operator new(size_t size) {
       address res = (address)resource_allocate_bytes(size);
       DEBUG_ONLY(set_allocation_type(res, RESOURCE_AREA);)
@@ -559,20 +529,7 @@
       return res;
   }
 
-  void* operator new [](size_t size) {
-      address res = (address)resource_allocate_bytes(size);
-      DEBUG_ONLY(set_allocation_type(res, RESOURCE_AREA);)
-      return res;
-  }
-
-  void* operator new [](size_t size, const std::nothrow_t& nothrow_constant) {
-      address res = (address)resource_allocate_bytes(size, AllocFailStrategy::RETURN_NULL);
-      DEBUG_ONLY(if (res != NULL) set_allocation_type(res, RESOURCE_AREA);)
-      return res;
-  }
-
   void  operator delete(void* p);
-  void  operator delete [](void* p);
 };
 
 // One of the following macros must be used when allocating an array
@@ -603,60 +560,22 @@
 #define REALLOC_C_HEAP_ARRAY(type, old, size, memflags)\
   (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), memflags))
 
-#define FREE_C_HEAP_ARRAY(type, old, memflags) \
+#define FREE_C_HEAP_ARRAY(type,old,memflags) \
   FreeHeap((char*)(old), memflags)
 
-// allocate type in heap without calling ctor
-// WARNING: type must not have virtual functions!!! There is no way to initialize vtable.
 #define NEW_C_HEAP_OBJ(type, memflags)\
   NEW_C_HEAP_ARRAY(type, 1, memflags)
 
+
 #define NEW_C_HEAP_ARRAY2(type, size, memflags, pc)\
   (type*) (AllocateHeap((size) * sizeof(type), memflags, pc))
 
 #define REALLOC_C_HEAP_ARRAY2(type, old, size, memflags, pc)\
   (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), memflags, pc))
 
-#define NEW_C_HEAP_ARRAY3(type, size, memflags, pc, allocfail)         \
-  (type*) AllocateHeap(size * sizeof(type), memflags, pc, allocfail);
-
-// !!! Attention, see comments above about the usage !!!
-
-// allocate type in heap and call ctor
-#define NEW_C_HEAP_OBJECT(objname, type, memflags, pc, allocfail)\
-  {                                                                                 \
-    objname = (type*)AllocateHeap(sizeof(type), memflags, pc, allocfail);           \
-    if (objname != NULL) ::new ((void *)objname) type();                            \
-  }
+#define NEW_C_HEAP_OBJ2(type, memflags, pc)\
+  NEW_C_HEAP_ARRAY2(type, 1, memflags, pc)
 
-// allocate array of type, call ctor for every element in the array
-#define NEW_C_HEAP_OBJECT_ARRAY(array_name, type, size, memflags, pc, allocfail)    \
-  {                                                                                 \
-    array_name = (type*)AllocateHeap(size * sizeof(type), memflags, pc, allocfail); \
-    if (array_name != NULL) {                                                       \
-      for (int index = 0; index < size; index++) {                                  \
-        ::new ((void*)&array_name[index]) type();                                   \
-      }                                                                             \
-    }                                                                               \
-  }
-
-// deallocate type in heap, call dtor
-#define FREE_C_HEAP_OBJECT(type, objname, memflags)                                 \
-  if (objname != NULL) {                                                            \
-    ((type*)objname)->~type();                                                      \
-    FREE_C_HEAP_ARRAY(type, objname, memflags);                                     \
-  }
-
-// deallocate array of type with size, call dtor for every element in the array
-#define FREE_C_HEAP_OBJECT_ARRAY(type, array_name, size, memflags)                  \
-  {                                                                                 \
-    if (array_name != NULL) {                                                       \
-      for (int index = 0; index < size; index++) {                                  \
-        ((type*)&array_name[index])->~type();                                       \
-      }                                                                             \
-      FREE_C_HEAP_ARRAY(type, array_name, memflags);                                \
-    }                                                                               \
-  }
 
 extern bool warn_new_operator;