在Java中实现Serializable的惩罚?

ACh*_*ice 35 java performance serializable

是否有罚款加

implements Serializable
Run Code Online (Sandbox Code Playgroud)

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

ada*_*shr 24

除非您/其他人实际序列化/反序列化,否则不会产生任何影响.Serializable只是一个标记界面.

它可能只会将生成的字节码的大小增加几个字节.


mik*_*era 24

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

更多细节:

  • 每个对象实例的大小没有增加
  • 类本身的大小略有增加,但由于这是一次性成本,因此在大量实例上摊销时是微不足道的
  • 对于需要在运行时进行接口检查的任何事物(反射,instancof查找,内联缓存的额外压力等),可能会有轻微的额外运行时成本.同样,对于大多数目的而言,这可能是微不足道的.
  • Serializable是一个标记接口,没有需要实现的方法.其他标记接口示例包括:Clonable,SingleThreadModel,Event侦听器.


Mov*_*ast 24

除非您执行序列化/反序列化,否则没有性能影响,但在api设计方面存在折衷.

来自Joshua Bloch的Effective java

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

这些适用于您的程度取决于您的用例.