Currently in the TabletServerBatchWriter, the following behavior is exhibited:
m = new Mutation(m);
totalMemUsed += m.estimatedMemoryUsed();
This means all data is copied twice when writing. The logic for doing this is a bit dubious, since not all clients are going to be subject to MapReduce's use of references.
It'd be good if we provided users with a way of signaling that there's no need to copy the mutation payload. Josh Elser suggested creating something akin to an ImmutableMutation, which help avoid some of the fears the batchwriter attempts to defend against.