序列化和性能(转)
转自:http://www.360doc.com/content/06/1217/00/15643_296709.shtml
?
通常人们认识的序列化类实现java.io.Serializable 像这样:
?
??
为了获得正确的测试结果,我们制定以下规则 。首先,不能测试一小部分对象,应该取较大的均值。第二,减小不必要的负载。如果测试程序快速产生大量的对象,会产生大量的垃圾收集。
在上面的代码中,我们仅序列化了50000个对象。并且没有将序列化的内容写入磁盘或者网络,因为会产生我们不希望的负载。
还有一点值得注意的是,如果有多个String类型的成员变量,他们之应该是不同的值。如果他们的值相同,那么他们引用的是同一个对象。
下面是不同jdk版本间的测试结果:
JDK 1.4.2_12?
Serializable: 9766ms.?
Streamfield: 9656ms.?
Read/Write object: 7781ms.?
Externalizable: 5875ms.?
?
JDK 1.5.0_19?
Serializable: 9016ms.?
Streamfield: 8859ms.?
Read/Write object: 7141ms.?
Externalizable: 5610ms.?
JDK 1.6.0 (B103)?
Serializable: 7484ms.?
Streamfield: 7312ms.?
Read/Write object: 5610ms.?
Externalizable: 4828ms.?
有趣的是你可以发现使用Externalizable 接口提升了55%的性能。同时也可以看出jdk不同版本的垃圾收集器&Hotpot引擎性能也在提升!
?
?