我在一个高度分布式的环境中工作。大量的网络访问和大量的数据库访问。
我有一些通过网络发送的类,并被序列化和反序列化。
大多数类在本质上都很简单,比如:
class A{
long a;
long b;
}还有一些更复杂(复合集合)。
在我工作的公司里有一些人声称所有的类都应该实现Externalizable而不是Serializable,这将对应用程序的性能产生重大影响。
虽然对性能的影响很难衡量,但由于应用程序如此之大,如此分布式,而且还没有完全准备好,我现在不能真正模拟完整的负载。
因此,也许你们中的一些人知道一些有趣的文章,可以向我揭示一些东西。或者你可以分享一些想法。
我的基本直觉是,在网络/db上序列化和反序列化简单类(就像上面的那个)没有任何区别,比方说当整个应用程序的IO进程在10%左右时。(我的意思是,90%的时间系统都在做IO以外的事情)
发布于 2010-08-22 16:29:00
我的基本直觉是,在网络/db上序列化和反序列化简单类(就像上面的那个)没有任何区别,比方说当整个应用程序的IO进程大约为10%时。(我的意思是,90%的时间系统都在做IO以外的事情)
你的直觉听起来很合理。但是到底是什么花了10%的时间呢?只是序列化/反序列化吗?或者,10%是否包括执行I/O的实际(时钟)时间?
编辑
如果您有实际的性能分析测量来支持您的"10%到15%“的时钟时间进行序列化+反序列化+ I/O,那么逻辑告诉您,您可以获得的最大性能改进将低于此。如果您可以将I/O从序列化/反序列化中分离出来,那么您就可以改进这个上限。我的猜测是,实际的改善将不到5%。
我建议您创建一个小型基准来使用序列化和外部化发送和接收您的数据类型之一,并查看它实际产生的百分比差异。
必须指出的是,与优化实现的外部化相比,泛型序列化存在(相对)显著的开销。这在很大程度上是由于序列化的一般属性造成的。
编组/解组对象中使用的每个类的类型描述符的开销transmitted.
但是,序列化/反序列化只占总I/O开销的一小部分,而且只是应用程序的一小部分。
发布于 2010-10-12 03:59:48
这是一个非常好的网站,它比较了许多不同的Java序列化机制。
http://github.com/eishay/jvm-serializers/wiki
发布于 2010-08-22 16:56:39
我会要求他们拿出一些衡量标准来支持他们的主张。然后,每个人都将有一个理性讨论的基础。目前您还没有。请注意,那些有主张的人应该提供支持证据:不要被吸引到负责证明他们是错误的。
https://stackoverflow.com/questions/3540665
复制相似问题