I don't like this because the entire delta chain *and* the root base object are held for the entire chain being applied.  There is now way to clear those variables out until after the entire chain is applied.

The delta chain frames aren't very big, so the fact that they cannot be discarded as the deltas are applied is probably not a big deal.

But the root base... that's probably large, and we should be able to discard it as soon as we have patched the delta onto it.  

There is no assurance that the runtime will discard delta and data from this method frame as being non-live when the applyDeltas method is invoked.  Because of that we need to assume the runtime is doing the simple thing, keeping these live until after applyDeltas returns, in which case the root base is still live... and we need to clear it ourselves when its dead.

The only way I can think to do that is to keep it all in one method like I did in patch set 4.  Or allocate a new little helper object that holds these variables in it, and gets passed into applyDeltas by reference, so the variables are in the heap rather than on the stack.

I'd like to avoid an allocation for the somewhat common case of a delta that gets a hit for its base in the DeltaBaseCache, so that means the longer load method like I had in patch set 4.