diff -r 38f4701d6587 -r 4adca7312d8f src/hotspot/share/gc/z/zMemory.hpp --- a/src/hotspot/share/gc/z/zMemory.hpp Mon Oct 28 11:23:48 2019 +0100 +++ b/src/hotspot/share/gc/z/zMemory.hpp Mon Oct 28 11:24:11 2019 +0100 @@ -49,14 +49,42 @@ }; class ZMemoryManager { +public: + typedef void (*CreateDestroyCallback)(const ZMemory* area); + typedef void (*ResizeCallback)(const ZMemory* area, size_t size); + + struct Callbacks { + CreateDestroyCallback _create; + CreateDestroyCallback _destroy; + ResizeCallback _shrink_from_front; + ResizeCallback _shrink_from_back; + ResizeCallback _grow_from_front; + ResizeCallback _grow_from_back; + + Callbacks(); + }; + private: ZList _freelist; + Callbacks _callbacks; + + ZMemory* create(uintptr_t start, size_t size); + void destroy(ZMemory* area); + void shrink_from_front(ZMemory* area, size_t size); + void shrink_from_back(ZMemory* area, size_t size); + void grow_from_front(ZMemory* area, size_t size); + void grow_from_back(ZMemory* area, size_t size); public: + ZMemoryManager(); + + void register_callbacks(const Callbacks& callbacks); + uintptr_t alloc_from_front(size_t size); uintptr_t alloc_from_front_at_most(size_t size, size_t* allocated); uintptr_t alloc_from_back(size_t size); uintptr_t alloc_from_back_at_most(size_t size, size_t* allocated); + void free(uintptr_t start, size_t size); };