docs: private bbBlock init(int initialSize, bbBlock initialBlock)
      {
          this._lastCapacity = BlockedBuffer._defaultBlockSizeMin;
          this._blockSizeUpperLimit = BlockedBuffer._defaultBlockSizeUpperLimit;
          while (this._lastCapacity < initialSize &&
                 this._lastCapacity < this._blockSizeUpperLimit)
          {
              this.nextBlockSize(this, 0);
          }
          int count = initialSize / this._lastCapacity;
          if (initialBlock != null) count = 1;
          this._blocks = new ArrayList<bbBlock>(count);
          if (initialBlock == null) {
              initialBlock = new bbBlock(this.nextBlockSize(this, 0));
          }
          this._blocks.add(initialBlock);
          this._next_block_position = 1;
          // create any preallocated blocks (following _next_block_position)
          bbBlock b;
          for (int need = initialSize - initialBlock.blockCapacity()
             ; need > 0
             ; need -= b.blockCapacity()
          ) {
              b = new bbBlock(this.nextBlockSize(this, 0));
              b._idx = -1;
              this._blocks.add(b);
          }
          return initialBlock;
      }