code: private long allocateSubpage(int normCapacity) {
          // Obtain the head of the PoolSubPage pool that is owned by the PoolArena and synchronize on it.
          // This is need as we may add it back and so alter the linked-list structure.
          PoolSubpage<T> head = arena.findSubpagePoolHead(normCapacity);
          int d = maxOrder; // subpages are only be allocated from pages i.e., leaves
          synchronized (head) {
              int id = allocateNode(d);
              if (id < 0) {
                  return id;
              }
  
              final PoolSubpage<T>[] subpages = this.subpages;
              final int pageSize = this.pageSize;
  
              freeBytes -= pageSize;
  
              int subpageIdx = subpageIdx(id);
              PoolSubpage<T> subpage = subpages[subpageIdx];
              if (subpage == null) {
                  subpage = new PoolSubpage<T>(head, this, id, runOffset(id), pageSize, normCapacity);
                  subpages[subpageIdx] = subpage;
              } else {
                  subpage.init(head, normCapacity);
              }
              return subpage.allocate();
          }
      }
docs: Create / initialize a new PoolSubpage of normCapacity
  Any PoolSubpage created / initialized here is added to subpage pool in the PoolArena that owns this PoolChunk
  
  @param normCapacity normalized capacity
  @return index in memoryMap