code: public void recycle(boolean force)
      {
          if (mConfig != null && mCurrentSegment != null) {
              if (force) {
                  /* If we are allowed to wipe out all existing data, it's
                   * quite easy; we'll just wipe out contents, and return
                   * biggest buffer:
                   */
                  resetWithEmpty();
              } else {
                  /* But if there's non-shared data (ie. buffer is still
                   * in use), can't return it yet:
                   */
                  if (mInputStart < 0 && (mSegmentSize + mCurrentSize) > 0) {
                      return;
                  }
                  // If no data (or only shared data), can continue
                  if (mSegments != null && mSegments.size() > 0) {
                      // No need to use anything from list, curr segment not null
                      mSegments.clear();
                      mSegmentSize = 0;
                  }
              }
  
              char[] buf = mCurrentSegment;
              mCurrentSegment = null;
              mConfig.freeMediumCBuffer(buf);
          }
      }
docs: Method called to indicate that the underlying buffers should now
  be recycled if they haven't yet been recycled. Although caller
  can still use this text buffer, it is not advisable to call this
  method if that is likely, since next time a buffer is needed,
  buffers need to reallocated.
  Note: calling this method automatically also clears contents
  of the buffer.