src/share/vm/memory/allocation.hpp

changeset 5278
b9d151496930
parent 5237
f2110083203d
child 5280
9f9c0a163cc5
equal deleted inserted replaced
5277:01522ca68fc7 5278:b9d151496930
711 // Most OS mallocs do something similar but Solaris malloc does not revert 711 // Most OS mallocs do something similar but Solaris malloc does not revert
712 // to mapped memory for large allocations. By default ArrayAllocatorMallocLimit 712 // to mapped memory for large allocations. By default ArrayAllocatorMallocLimit
713 // is set so that we always use malloc except for Solaris where we set the 713 // is set so that we always use malloc except for Solaris where we set the
714 // limit to get mapped memory. 714 // limit to get mapped memory.
715 template <class E, MEMFLAGS F> 715 template <class E, MEMFLAGS F>
716 class ArrayAllocator : StackObj { 716 class ArrayAllocator VALUE_OBJ_CLASS_SPEC {
717 char* _addr; 717 char* _addr;
718 bool _use_malloc; 718 bool _use_malloc;
719 size_t _size; 719 size_t _size;
720 public: 720 bool _free_in_destructor;
721 ArrayAllocator() : _addr(NULL), _use_malloc(false), _size(0) { } 721 public:
722 ~ArrayAllocator() { free(); } 722 ArrayAllocator(bool free_in_destructor = true) :
723 _addr(NULL), _use_malloc(false), _size(0), _free_in_destructor(free_in_destructor) { }
724
725 ~ArrayAllocator() {
726 if (_free_in_destructor) {
727 free();
728 }
729 }
730
723 E* allocate(size_t length); 731 E* allocate(size_t length);
724 void free(); 732 void free();
725 }; 733 };
726 734
727 #endif // SHARE_VM_MEMORY_ALLOCATION_HPP 735 #endif // SHARE_VM_MEMORY_ALLOCATION_HPP

mercurial