All your distributed objects such as your key and value objects, objects you offer into distributed queue and your distributed callable/runnable objects need to be serialized.
Hazelcast serializes all your objects into an instance of
Data is the binary representation of an object.
When Hazelcast serializes an object into
(1) It first checks whether the object is an instance of
(2) If above fails, then it checks if it is an instance of
(3) If above fails, then it checks whether the object is of a well-known type like String, Long, Integer, etc. and user specified types like ByteArraySerializer or StreamSerializer,
(4) If above checks fail, Hazelcast will use Java serialization.
If all of the above checks do not work, then serialization will fail. When a class implements multiple interfaces, above steps are important to determine the serialization mechanism that Hazelcast will use. And when a class definition is required for any of these serializations, all the classes needed by the application should be on the classpath, Hazelcast does not download them automatically.
Hazelcast optimizes the serialization for the below types, and the user cannot override this behavior:
Hazelcast also optimizes the following types. However, you can override them by creating a custom serializer and registering it. See Custom Serialization for more information.
Note that, if the object is not an instance of any explicit type, Hazelcast uses Java Serialization for Serializable and Externalizable objects. The default behavior can be changed using a Custom Serialization.
Let's dig into the details of the above serialization mechanisms in the following sections.