I didn't want to do that here, because needNewObjectIds() is based on whether or not this field is non-null.  Assigning the new empty collection into newObjectIds would change the behavior of this class.  That violates the "getter shouldn't change state" rule that most programmers assume in Java.

I'm creating a new collection here, because we don't have a singleton that provides an empty map, because we don't have a concept of an immutable map.  And I didn't want to override the mutator methods to create an immutable singleton, because that would cause the JIT to be forced to assume a lot of these mutation methods need to be virtual dispatches rather than static, potentially resulting in slower runtime code.

So it seemed shorter to just alloc the new empty collection on each request.  They are pretty small, and we only do one call per ReceivePack execution anyway, so the amount of garbage is pretty low.