gpt4 book ai didi

java - 可序列化和外部化之间的性能差异 (Java)

转载 作者:行者123 更新时间:2023-12-02 03:50:45 25 4
gpt4 key购买 nike

我在高度分布式的环境中工作。大量的网络访问和大量的数据库访问。

我有一些类通过网络发送,并被序列化和反序列化。

大多数类本质上都非常简单,例如:

class A{
long a;
long b;
}

有些更复杂(复合 - 集合)。

我工作的公司里有一些人声称所有的类都应该实现 Externalizable而不是Serializable ,这将对应用程序的性能产生重大影响。

虽然对性能的影响很难衡量,但由于应用程序如此庞大、如此分散且尚未完全准备好,所以我现在无法真正模拟满负载。

也许你们中的一些人知道一些有趣的文章,可以向我揭示一些事情。或者您可以分享一些想法。

我的基本直觉是,当整个应用程序的 IO 进程约为 10% 时,通过网络/数据库序列化和反序列化简单的类(如上面的类)不会产生任何影响。 (我的意思是 90% 的时间系统都在做 IO 之外的其他事情)

最佳答案

My basic intuition was that is would not make any difference serializing and deserializing simple classes (like the one above) over the network/db, lets say when the IO process of the whole app are around 10%. ( I mean 90% of the time the system is doing other stuff than IO )

你的直觉听起来很合理。但到底是什么占用了 10% 的时间呢?只是序列化/反序列化吗?或者 10% 是否包括执行 I/O 的实际(时钟)时间?

编辑

如果您有实际的分析测量来支持执行序列化 + 反序列化 + I/O 的“10% 到 15%”时钟时间,那么逻辑会告诉您您可以获得的最大性能改进会小于那个。如果您可以将 I/O 与序列化/反序列化分开,则可以细化该上限。我的猜测是实际的改进不会超过 5%。

我建议您创建一个小型基准来使用序列化和外部化发送和接收一个您的数据类型,并查看它实际产生的百分比差异。

必须指出的是,与优化实现的外部化相比,通用序列化存在(相对)显着的开销。这很大程度上是由于序列化的一般属性造成的。

  • 存在对正在传输的对象中使用的每个类的类型描述符进行编码/解码的开销。

  • 将每个编码对象添加到哈希表中会产生开销,以便序列化忠实地记录周期等。

但是,序列化/反序列化仅占总 I/O 开销的一小部分,而这些也只是您应用程序的一小部分。

关于java - 可序列化和外部化之间的性能差异 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3540665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com