As part of implementing the off-heap SerializedMemoryStore, off-heap memory management has to be done since JVM does not know about the memory usage outside its heap. Moreover, ByteBuffer reuse should be implemented through the management of memory to reduce the overhead of allocateDirect(). allocateDirect() has significant overhead that it can increase the overall job completion time. There will be three main components to be implemented: 1. MemoryPoolAssigner, 2. MemoryChunk and 3. MemoryPool. Detailed information about the design is attached.