It mostly comes with my writing libs for Android, where GC has a large penalty. It's a hard thing to microbenchmark since it involves GC. I think moving the KryoObjectOutput to a field and a setter (or two) for the Kryo and Output/Input instance is easy enough. No need to pool. read/write can be reentrant, but are single threaded and nested calls will set the same instances.