In deciding which refs to bash, the gc code builds an array of the least recently used refs. Then it bashes some of them, stopping if it looks like enough space will be freed. It considers the refs to bash in the wrong order. This only matters if the space condition is satisfied. In the case that the space condition is not satisfied (yealding the intended bashing), it might be a good idea to bash some more refs immediately (like the ones inthe upper half of the bag), but this doesn't happen either.