Class SerializerCache

  • public final class SerializerCache
    extends java.lang.Object
    Simple cache object that allows for doing 2-level lookups: first level is by "local" read-only lookup Map (used without locking) and second backup level is by a shared modifiable HashMap. The idea is that after a while, most serializers are found from the local Map (to optimize performance, reduce lock contention), but that during buildup we can use a shared map to reduce both number of distinct read-only maps constructed, and number of serializers constructed.

    Cache contains three kinds of entries, based on combination of class pair key. First class in key is for the type to serialize, and second one is type used for determining how to resolve value type. One (but not both) of entries can be null.

    • Constructor Detail

      • SerializerCache

        public SerializerCache()
    • Method Detail

      • getReadOnlyLookupMap

        public ReadOnlyClassToSerializerMap getReadOnlyLookupMap()
        Method that can be called to get a read-only instance populated from the most recent version of the shared lookup Map.
      • size

        public int size()
      • untypedValueSerializer

        public JsonSerializer<java.lang.Object> untypedValueSerializer​(java.lang.Class<?> type)
        Method that checks if the shared (and hence, synchronized) lookup Map might have untyped serializer for given type.
      • typedValueSerializer

        public JsonSerializer<java.lang.Object> typedValueSerializer​(java.lang.Class<?> cls)
      • addTypedSerializer

        public void addTypedSerializer​(JavaType type,
                                       JsonSerializer<java.lang.Object> ser)
        Method called if none of lookups succeeded, and caller had to construct a serializer. If so, we will update the shared lookup map so that it can be resolved via it next time.
      • addTypedSerializer

        public void addTypedSerializer​(java.lang.Class<?> cls,
                                       JsonSerializer<java.lang.Object> ser)
      • flush

        public void flush()
        Method called by StdSerializerProvider#flushCachedSerializers() to clear all cached serializers