Why bother with this type?  Just use UnresolvedDelta for the base case that bootstraps the resolveDeltas() method.

Using this type inside of UnresolvedDelta increases the memory usage during the scanning of the pack by at least 12 bytes on 32 bit JVMs per object.  Scanning 1 million deltas costs us 12 more MB of memory.  On a 64 bit JVM we could be looking at more than 24 MB here.  I don't think that is a trivial change.

I'm OK with the DeltaVisit type because its so transient, and you need it for the stack management.  But its not OK to make a massive increase to the relatively persistant unresolved delta chains.