在Java中实现可序列化的惩罚?

2022-09-01 05:01:18

是否有要添加的惩罚

implements Serializable

到 Java 类?对实例化对象的大小或性能的影响?


答案 1

除非执行序列化/反序列化,否则不会对性能产生影响,但在 API 设计方面存在权衡。

来自 Effective java by Joshua Bloch

  • 实现Sscribializable的一个主要成本是,它降低了在类发布后更改类实现的灵活性。
  • 实现Serializable的第二个成本是它增加了错误和安全漏洞的可能性。
  • 实现Serializable的第三个成本是,它增加了与发布类的新版本相关的测试负担。

这些在多大程度上适用于您取决于您的用例。


答案 2

成本接近于零,不值得关注。

一些进一步的细节:

  • 每个对象实例的大小没有增加
  • 类本身的规模略有增加,但由于这是一次性成本,因此在大量实例上摊销时是微不足道的
  • 对于需要在运行时执行接口检查的任何内容(反射、instancof 查找、对内联缓存的额外压力等),可能会有轻微的额外运行时成本。同样,对于大多数目的来说,这可能可以忽略不计。
  • 可序列化是一个标记接口,没有需要实现的方法。其他标记接口示例包括:可克隆、单线程模型、事件侦听器。

推荐