What Robin said.  If decompress returns null, we caught an OutOfMemoryError above.  That means the allocation for the array failed.  But we need to do another allocation (hopefully smaller!) to create the large delta object loader.  data (our base object) is however allocated and held by a local variable.

The Java standard doesn't define what happens here.  An implementation may leave the data variable live until after the delta.large() call returns its value.  That means the GC can't reclaim that space.  But its dead.  Explicitly nulling it out helps to ensure its really dead.

If the compiler can deduce that the variable is dead and discard the local from the live set, it should also be able to deduce that the assignment to null is unnecessary, and drop that instruction.  So this shouldn't hurt a smart compiler, and helps a simpler one.