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

ovu*_*tin 13 java performance serialization

在处理套接字和序列化对象时,我注意到有一些第三方库可以在Java上更快地进行对象序列化,例如KryoFST.到目前为止,我期望Java的序列化得到优化并且速度最快.因为,它依赖于语言,并提供预期更快的低级解决方案.但是,考虑过的库声称它们比Java更快.

有人可以解释为什么Java无法提供最快的序列化解决方案吗?为了什么它放弃了更好的表现?

提前致谢.

R.M*_*ler 19

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

原因:

  • 爬行每个Object的Class层次结构,以便对每个Object执行多次read/writeObject调用.
  • 部分糟糕的编码(1.7改进)
  • 一些经常使用的类使用旧的慢速+过时的序列化功能,如putfield/getfield等.
  • 临时对象分配太多
  • 大量验证(版本控制,实现接口)
  • 慢速Java输入/输出流
  • 设置/获取字段值的反射.
  • 使用需要"大数字"的JDK集合,如Integer或Long,而不是原语.
  • 实现缺乏某些算法优化:-)
  • 在x86上,原语被重新排序为网络字节顺序(在java代码中,而不是本机).

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