Details
-
Task
-
Resolution: Done
-
Major
-
8.0.2.Final
-
None
Description
Marshalling currently uses a thread-local cache for RiverMarshaller instances. One of the reasons to cache these {{RiverMarshaller}}s was that they always allocate 2 {{IdentityIntMap}}s, one for the instance cache and one for the class cache.
But that also creates a problem, because these caches never shrink. If a StateResponseCommand includes a lot of Serializable objects, the caches will grow, and then they will never be used untile the next state transfer.
We should change our internal marshalling API so that it's easy to reuse marshallers without using thread-locals, and to use one-off marshallers for state transfer.
Currently unmarshalling also requires a thread-local to use the proper classloader. A session-based marshalling API would remove the need for the thread-local (especially important with sequential interceptors).