public IntBuffer compact() {

    int pos = position();
    int lim = limit();
    assert (pos <= lim);
    int rem = (pos <= lim ? lim - pos : 0);

    ByteBuffer db = bb.duplicate();
    db.limit(ix(lim));
    db.position(ix(0));
    ByteBuffer sb = db.slice();
    sb.position(pos << 2);
    sb.compact();
    position(rem);
    limit(capacity());
    return this;
  }