Ah ok. JavaType is the fastest way to indicate type information, so it is preferable to TypeReference or even simple Class.
ObjectReader does (optionally) pre-fetch the underlying JsonDeserializer, so if you construct and retain ObjectReader, it can avoid both type resolution (TypeReference -> JavaType) and JsonDeserializer look up for root value. If so, reusing ObjectReader as-is (without changing type; other re-configuration is fine) will be more efficient than constructing a new instance from ObjectMapper.
As to List<X>, as long as you use JavaType, it should not have significant performance overhead. Type resolution for figuring out type parameters (generic type of element), from TypeReference, does take some time. Whether it matters a lot depends on use case: in grand scheme of things it may not really matter.
It may make sense to write a very simple jmh-based test for your use case, if you really want to see difference between approaches for your specific case. I think this is actually useful thing to try, and once you have done it once it takes very little time.
which I use for comparing performance of various dataformats via Jackson.
which compares various Java JSON libraries, including jackson and jackson-jr.
There is nothing particularly interesting per se, but shows one way to use jmh for (micro-)benchmarks.
-+ Tatu +-