public void enqueue(byte[] buffer) {
      BufferNode bufferNode = new BufferNode(buffer);

      if (headBufferNode == null) {
        headBufferNode = bufferNode;

        count = 1;

        return;
      }

      BufferNode previousBufferNode = null;
      BufferNode currentBufferNode = headBufferNode;

      while ((currentBufferNode != null)
          && (currentBufferNode.buffer.length > bufferNode.buffer.length)) {

        previousBufferNode = currentBufferNode;

        currentBufferNode = currentBufferNode.next;
      }

      if (previousBufferNode == null) {
        bufferNode.next = headBufferNode;

        headBufferNode = bufferNode;
      } else {
        bufferNode.next = currentBufferNode;

        previousBufferNode.next = bufferNode;
      }

      if (++count > THREADLOCAL_BUFFER_COUNT_LIMIT) {
        if (previousBufferNode == null) {
          previousBufferNode = headBufferNode;
        }

        currentBufferNode = previousBufferNode.next;

        while (currentBufferNode.next != null) {
          previousBufferNode = currentBufferNode;
          currentBufferNode = currentBufferNode.next;
        }

        // Dereference

        previousBufferNode.next = null;

        // Help GC

        currentBufferNode.buffer = null;
        currentBufferNode.next = null;
      }
    }