1.1 --- a/src/share/vm/memory/allocation.hpp Wed Jun 19 18:13:52 2013 +0200 1.2 +++ b/src/share/vm/memory/allocation.hpp Thu Jun 20 10:03:58 2013 +0200 1.3 @@ -732,13 +732,21 @@ 1.4 // is set so that we always use malloc except for Solaris where we set the 1.5 // limit to get mapped memory. 1.6 template <class E, MEMFLAGS F> 1.7 -class ArrayAllocator : StackObj { 1.8 +class ArrayAllocator VALUE_OBJ_CLASS_SPEC { 1.9 char* _addr; 1.10 bool _use_malloc; 1.11 size_t _size; 1.12 + bool _free_in_destructor; 1.13 public: 1.14 - ArrayAllocator() : _addr(NULL), _use_malloc(false), _size(0) { } 1.15 - ~ArrayAllocator() { free(); } 1.16 + ArrayAllocator(bool free_in_destructor = true) : 1.17 + _addr(NULL), _use_malloc(false), _size(0), _free_in_destructor(free_in_destructor) { } 1.18 + 1.19 + ~ArrayAllocator() { 1.20 + if (_free_in_destructor) { 1.21 + free(); 1.22 + } 1.23 + } 1.24 + 1.25 E* allocate(size_t length); 1.26 void free(); 1.27 };