Serialization
Objects are serialized in a number of situations in Java. The two main reasons to serialize objects are to transfer objects and to store them.
There are several ways to improve the performance of serialization
and deserialization.
First, fields that are transient
do not get serialized, saving both space and time. You can consider
implementing readObject()
and writeObject()
(see
java.io.Serializable
documentation) to override the
default serialization routine; it may be that you can produce a
faster serialization routine for your specific objects. If you need
this degree of control, you are better off using the
java.io.Externalizable
interface (the reason is illustrated
shortly). Overriding the default serialization routine in this way is
generally only worth doing for large or frequently serialized
objects. The tight control this gives you may also be necessary to
correctly handle
canonicalized
objects (to ensure objects remain canonical when deserializing them).
To transfer objects across networks, it is worth compressing the serialized objects. For large amounts of data, the transfer overhead tends to swamp the costs of compressing and decompressing the data. For storing to disk, it is worth serializing multiple objects to different files rather than to one large file. The granularity of access to individual objects and subsets of objects is often improved as well.
It is also possible to serialize objects in a separate thread for storage and network transfers, ...
Get Java Performance Tuning now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.