com.fasterxml.jackson.databind.ser

## Class SerializerCache

- java.lang.Object
- - com.fasterxml.jackson.databind.ser.SerializerCache

    public final class SerializerCache
    extends 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.

### Field Summary

Fields
`static int` `DEFAULT_MAX_CACHE_SIZE` By default, allow caching of up to 4000 serializer entries (for possibly up to 1000 types; but depending access patterns may be as few as half of that).
`static int` `DEFAULT_MAX_CACHED` Deprecated. Use `DEFAULT_MAX_CACHE_SIZE` instead.

### Constructor Summary

Constructors
Constructor and Description
`SerializerCache()`
`SerializerCache(int maxCached)`
`SerializerCache(LookupCache<TypeKey,JsonSerializer<Object>> cache)`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `addAndResolveNonTypedSerializer(Class<?> rawType, JavaType fullType, JsonSerializer<Object> ser, SerializerProvider provider)` Another alternative that will cover both access via raw type and matching fully resolved type, in one fell swoop.
`void` `addAndResolveNonTypedSerializer(Class<?> type, JsonSerializer<Object> ser, SerializerProvider provider)`
`void` `addAndResolveNonTypedSerializer(JavaType type, JsonSerializer<Object> ser, SerializerProvider provider)`
`void` `addTypedSerializer(Class<?> cls, JsonSerializer<Object> ser)`
`void` `addTypedSerializer(JavaType type, JsonSerializer<Object> ser)` Method called if none of lookups succeeded, and caller had to construct a serializer.
`void` `flush()` Method called by StdSerializerProvider#flushCachedSerializers() to clear all cached serializers
`ReadOnlyClassToSerializerMap` `getReadOnlyLookupMap()` Method that can be called to get a read-only instance populated from the most recent version of the shared lookup Map.
`int` `size()`
`JsonSerializer<Object>` `typedValueSerializer(Class<?> cls)`
`JsonSerializer<Object>` `typedValueSerializer(JavaType type)`
`JsonSerializer<Object>` `untypedValueSerializer(Class<?> type)` Method that checks if the shared (and hence, synchronized) lookup Map might have untyped serializer for given type.
`JsonSerializer<Object>` `untypedValueSerializer(JavaType type)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### DEFAULT_MAX_CACHE_SIZE

    public static final int DEFAULT_MAX_CACHE_SIZE

By default, allow caching of up to 4000 serializer entries (for possibly up to 1000 types; but depending access patterns may be as few as half of that).

See Also:
  Constant Field Values

#### DEFAULT_MAX_CACHED

    @Deprecated
    public static final int DEFAULT_MAX_CACHED

Deprecated. Use `DEFAULT_MAX_CACHE_SIZE` instead.

See Also:
  Constant Field Values

### Constructor Detail

#### SerializerCache

    public SerializerCache()

#### SerializerCache

    public SerializerCache(int maxCached)

#### SerializerCache

    public SerializerCache(LookupCache<TypeKey,JsonSerializer<Object>> cache)

Since:
  2.16

### 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<Object> untypedValueSerializer(Class<?> type)

Method that checks if the shared (and hence, synchronized) lookup Map might have untyped serializer for given type.

#### untypedValueSerializer

    public JsonSerializer<Object> untypedValueSerializer(JavaType type)

#### typedValueSerializer

    public JsonSerializer<Object> typedValueSerializer(JavaType type)

#### typedValueSerializer

    public JsonSerializer<Object> typedValueSerializer(Class<?> cls)

#### addTypedSerializer

    public void addTypedSerializer(JavaType type,
                                   JsonSerializer<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(Class<?> cls,
                                   JsonSerializer<Object> ser)

#### addAndResolveNonTypedSerializer

    public void addAndResolveNonTypedSerializer(Class<?> type,
                                                JsonSerializer<Object> ser,
                                                SerializerProvider provider)
                                         throws JsonMappingException

Throws:
  `JsonMappingException`

#### addAndResolveNonTypedSerializer

    public void addAndResolveNonTypedSerializer(JavaType type,
                                                JsonSerializer<Object> ser,
                                                SerializerProvider provider)
                                         throws JsonMappingException

Throws:
  `JsonMappingException`

#### addAndResolveNonTypedSerializer

    public void addAndResolveNonTypedSerializer(Class<?> rawType,
                                                JavaType fullType,
                                                JsonSerializer<Object> ser,
                                                SerializerProvider provider)
                                         throws JsonMappingException

Another alternative that will cover both access via raw type and matching fully resolved type, in one fell swoop.

Throws:
  `JsonMappingException`
Since:
  2.7

#### flush

    public void flush()

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