void init(int arenaIx) throws ClosedByInterruptException {
      this.arenaIx = arenaIx;
      try {
        data = preallocateArenaBuffer(arenaSize);
      } catch (OutOfMemoryError oom) {
        throw new OutOfMemoryError("Cannot allocate " + arenaSize + " bytes: " + oom.getMessage()
            + "; make sure your xmx and process size are set correctly.");
      }
      int maxMinAllocs = 1 << (arenaSizeLog2 - minAllocLog2);
      buffers = new LlapAllocatorBuffer[maxMinAllocs];
      headers = new byte[maxMinAllocs];
      int allocLog2Diff = maxAllocLog2 - minAllocLog2, freeListCount = allocLog2Diff + 1;
      freeLists = new FreeList[freeListCount];
      for (int i = 0; i < freeListCount; ++i) {
        freeLists[i] = new FreeList();
      }
      int maxMaxAllocs = 1 << (arenaSizeLog2 - maxAllocLog2),
          headerIndex = 0, headerStep = 1 << allocLog2Diff;
      freeLists[allocLog2Diff].listHead = 0;
      for (int i = 0, offset = 0; i < maxMaxAllocs; ++i, offset += maxAllocation) {
        setHeaderFree(headerIndex, allocLog2Diff, CasLog.Src.CTOR);
        data.putInt(offset, (i == 0) ? -1 : (headerIndex - headerStep));
        data.putInt(offset + 4, (i == maxMaxAllocs - 1) ? -1 : (headerIndex + headerStep));
        headerIndex += headerStep;
      }
    }
Quite similar as deallocateEvicted, however since this request was not originated from a reserveMemory call,
MM state has to be maintained here.
@param buffer
llap-server/src/java/org/apache/hadoop/hive/llap/cache/BuddyAllocator.java