You can construct a RpcRetryingCallerFactory, but actually the conf is read for each caller creation. Reading the conf is obviously expensive, and a profiling session shows it. If we want to sent hundreds of thousands of queries per second, we should not do that.
RpcRetryingCallerFactory.newCaller is called for each get, for example.
This is not a regression, we have something similar in 0.94.
On the 0.96, we see the creation of: java.util.regex.Matcher: 15739712b after a few thousand calls to "get".