ah... now I see what you mean and it is a bug in my impl. 

What I wanted todo is this:
```java
if (allocs < size()) {
    int free = size() - allocs;
    for (int i = head; free > 0; i = nextIdx(i)) {
        if (!freeEntry(entries[i])) {
            // all freed
            return;
        }
        free--;
    }
}
```