为什么 Java 的序列化比第 3 方 API 慢?

2024-01-02

在处理套接字和序列化对象时,我注意到有一些第三方库可以在 Java 上实现更快的对象序列化,例如Kryo http://code.google.com/p/kryo/ and FST http://code.google.com/p/fast-serialization/。到目前为止,我预计Java的序列化是优化的并且是最快的。因为,它依赖于语言,并提供了预计会更快的低级解决方案。然而,所考虑的库声称它们比 Java 更快。

有人能解释一下为什么Java不能提供最快的序列化解决方案吗?为了什么而放弃更好的性能?

提前致谢。


有几个原因(我是http://code.google.com/p/fast-serialization/ http://code.google.com/p/fast-serialization/)

Reasons:

  • 爬取每个对象的类层次结构,对每个对象执行多次读/写对象调用。
  • 部分编码较差(1.7 有所改进)
  • 一些常用的类利用旧的缓慢且过时的序列化功能,例如 putfield/getfield 等。
  • 临时对象分配过多
  • 大量验证(版本控制、实现的接口)
  • 慢速 Java 输入/输出流
  • 设置/获取字段值的反射。
  • 使用需要“大数字”(例如 Integer 或 Long)的 JDK 集合,而不是基元。
  • 实现缺乏某些算法优化:-)
  • 原语在 x86 上被重新排序为网络字节顺序(在 Java 代码中,而不是本机)。

为了提供更好的性能,他们必须放弃对旧版本控制方案的支持(例如,读/写对象当前的工作方式不是最佳的),并使版本控制支持等一些事情成为可选的,或者选择对性能更敏感的方法(将有可能)。此外,HotSpot 可能会添加一些内在函数来改进基元的低级处理。在设计 API 时需要考虑性能,而 JDK 序列化可能并非如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Java 的序列化比第 3 方 API 慢? 的相关文章

随机推荐