Pages

Friday, July 22, 2011

Java Serialization performance improvement

If your application or application server spends a lot of time during serialization and deserialization of java objects say due to disk caching or replication then improving the performance of java serialization pays a lot of dividend in terms of reduced CPU% and improved performance. It is worth spending the time optimizing serialization performance.

The best performance in serializing or deserializing data comes by owning the process by implementing Externalizable. Take control over writing and reading your own state. That will give the best performance.

See these articles that expound on the topic:
http://www.javaperformancetuning.com/tips/rawtips.shtml
http://www.onjava.com/pub/a/onjava/excerpt/JavaRMI_10/index.html

Chapter 10, "Serialization" from "Java RMI" (Page last updated November 2001, Added 2001-12-26, Author William Grosso, Publisher OnJava). Tips:
  1. Use transient to avoid sending data that doesn't need to be serialized.
  2. Serialization is a generic marshalling mechanism, and generic mechanisms tend to be slow.
  3. Serialization uses reflection extensively, and this also makes it slow.
  4. Serialization tends to generate many bytes even for small amounts of data.
  5. The Externalizable interface is provided to solve Serialization's performance problems.
  6. Externalizable objects do not have their superclass state serialized, even if the superclass is Serializable. This can be used to reduce the data written out during serialization.
  7. Use Serializable by default, then make classes Externalizable on a case-by-case basis to improve performance.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.