在处理套接字和序列化对象时,我注意到有一些第三方库可以在 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(使用前将#替换为@)