在处理套接字和序列化对象期间,我注意到有一些第三方库可以在 Java 上更快地进行对象序列化,例如Kryo和FST。到现在为止,我期望Java的序列化是优化的并且是最快的。因为,它依赖于语言,并提供了一个预计会更快的低级解决方案。但是,所考虑的库声称它们比 Java 更快。
有人可以解释为什么 Java 不能提供最快的序列化解决方案吗?为了什么而放弃更好的性能?
提前致谢。
有几个原因(我是http://code.google.com/p/fast-serialization/的作者)
原因:
为了提供更好的性能,他们将不得不放弃对旧版本控制方案的支持(例如,read/writeObject 当前的工作方式不是最理想的),并使诸如版本控制支持之类的一些事情是可选的,或者选择对性能更敏感的方法(会有可能)。此外,HotSpot 可能会添加一些内在函数来改进基元的低级处理。在设计 API 时需要考虑性能,而 JDK 序列化可能不是这种情况。
Java 序列化很慢,因为它使用反射。JDK 序列化做了很多向后兼容性检查和严格的类型检查。但是在大多数情况下,反序列化后 java 序列化获得了 100% 相同的对象。