731 NOT_PRODUCT(int _nesting;)
732
733 public:
734 ReallocMark() PRODUCT_RETURN;
735 void check() PRODUCT_RETURN;
736 };
737
738 // Helper class to allocate arrays that may become large.
739 // Uses the OS malloc for allocations smaller than ArrayAllocatorMallocLimit
740 // and uses mapped memory for larger allocations.
741 // Most OS mallocs do something similar but Solaris malloc does not revert
742 // to mapped memory for large allocations. By default ArrayAllocatorMallocLimit
743 // is set so that we always use malloc except for Solaris where we set the
744 // limit to get mapped memory.
745 template <class E, MEMFLAGS F>
746 class ArrayAllocator VALUE_OBJ_CLASS_SPEC {
747 char* _addr;
748 bool _use_malloc;
749 size_t _size;
750 bool _free_in_destructor;
751 public:
752 ArrayAllocator(bool free_in_destructor = true) :
753 _addr(NULL), _use_malloc(false), _size(0), _free_in_destructor(free_in_destructor) { }
754
755 ~ArrayAllocator() {
756 if (_free_in_destructor) {
757 free();
758 }
759 }
760
761 E* allocate(size_t length);
762 void free();
763 };
764
765 #endif // SHARE_VM_MEMORY_ALLOCATION_HPP
|
731 NOT_PRODUCT(int _nesting;)
732
733 public:
734 ReallocMark() PRODUCT_RETURN;
735 void check() PRODUCT_RETURN;
736 };
737
738 // Helper class to allocate arrays that may become large.
739 // Uses the OS malloc for allocations smaller than ArrayAllocatorMallocLimit
740 // and uses mapped memory for larger allocations.
741 // Most OS mallocs do something similar but Solaris malloc does not revert
742 // to mapped memory for large allocations. By default ArrayAllocatorMallocLimit
743 // is set so that we always use malloc except for Solaris where we set the
744 // limit to get mapped memory.
745 template <class E, MEMFLAGS F>
746 class ArrayAllocator VALUE_OBJ_CLASS_SPEC {
747 char* _addr;
748 bool _use_malloc;
749 size_t _size;
750 bool _free_in_destructor;
751
752 static bool should_use_malloc(size_t size) {
753 return size < ArrayAllocatorMallocLimit;
754 }
755
756 static char* allocate_inner(size_t& size, bool& use_malloc);
757 public:
758 ArrayAllocator(bool free_in_destructor = true) :
759 _addr(NULL), _use_malloc(false), _size(0), _free_in_destructor(free_in_destructor) { }
760
761 ~ArrayAllocator() {
762 if (_free_in_destructor) {
763 free();
764 }
765 }
766
767 E* allocate(size_t length);
768 E* reallocate(size_t new_length);
769 void free();
770 };
771
772 #endif // SHARE_VM_MEMORY_ALLOCATION_HPP
|