概要分析
主要每个ObjectMapper
实例对象会维护一个序列化器缓存,即_rootDeserializers
成员变量,这是一个ConcurrentHashMap。
在readValues()
的时候,会调用_findRootDeserializer()
查找json序列化器。
如果_rootDeserializers
中没有获取到,会调用com.fasterxml.jackson.databind.deser.DeserializerCache#findValueDeserializer
进行获取。
在DeserializerCache
中也会有一个序列化器缓存叫_cachedDeserializers
,这是个LRU map。
如果在_cachedDeserializers
中获取不到,就要新建一个序列化器了。
这个就恼火了,会频繁的尝试类加载,方法调用轨迹如下:
结论
因此,如果每次都新建一个ObjectMapper
实例,那么每次都需要重新创建json序列化器,会导致严重的类加载操作。
- 尽量复用
ObjectMapper
实例对象【当然是线程安全的】。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。